一直对爬虫充满着好奇, 最近终于有时间来好好学习一番, 我是在网上找到传智播客的课程视频, 跟着视频学习 python 编写爬虫的, 很多案例都很通用, 特别记录一下, 以后工作中遇到了可以直接拿来使用.
下面这个案例是使用正则表达式来提取内涵段子网上的段子. 该示例是在 python3 的环境下运行的
import urllib.request
import re
import random
class Spider:
def headers(self):
"""
随机产生 User-Agent 的 header
:return:
"""headers_list = ["User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0","User-Agent:Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)","User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)","Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1","Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)","Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)",
]
ua_agent = random.choice(headers_list)
return ua_agent
def load_page(self, url, ua_agent):
"""
加载一个页面的数据
:param url: 页面的 url
:param ua_agent: User-Agent
:return: 返回页面的 html 数据
"""headers = {"User - Agent ": ua_agent}
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
return response.read()
def parse(self, html):
"""
解析页面的数据
:param html:
:return:
"""
# re.S 是将所有的字符串作为一个整体进行匹配; re.I 表示忽略大小写
patten = re.compile('<h1 class="title">.*?</h1>', re.S)
result = patten.findall(html.decode("utf-8"))
return result
def write(self, content):
"""
保存数据, 把提取出的数据写入文件中
:param content: 提取的数据
: return: """
# 返回的 content 是一个 list, 写入文件的时候遍历 list 逐条写入
for each in content:
# 把页面中的多余字符用空格替代
each = each.replace('<h1 class="title ">', '').replace('<p>','').replace('</p>', '').replace('</h1>','')
# print(each)
with open("duanzi.text ", "w ") as f:
f.write(each + "\n ")
def main(self, url):
"""
:param url: 爬取数据的起始页面 url
:return:
"""
html = self.load_page(url)
content = self.parse(html)
self.write(content)
if __name__ == "__main__":
url = "http://www.neihanshequ.com"
spider = Spider()
spider.main(url)
来源: http://blog.csdn.net/qq_29557137/article/details/79220050