如果说当下最热门的语言,那非属 python 不可。如果说 python 最火热的方向是哪个,那么爬虫绝对有一席之地。现在的许多 python 培训课程,都喜欢拿 python 爬虫来增加学员的学习兴趣。那么,怎么用 python 爬取数据?小编接下来带你了解一个 python 爬虫的开发流程。
小编先放上一个示例代码(以当当好评榜 TOP500 为例),以下介绍基于该代码进行介绍。
import requests # 引入request库进行页面请求
from requests.exceptions import RequestException # 引入RequestException来捕获request可能出现的异常
import re # 引入re库来进行正则匹配
import json # 引入json 来进行json格式转化
def get(url): # 将请求方法封装,方便使用try语句捕捉异常
try:
response = requests.get(url) # 使用request的get方法获取响应流
if response.status_code == 200: # 处理响应流,如果不是200响应,则返回None
return response.text # 将响应流以文本方式返回
return None
except RequestException:
return None
def parse(text): # 将正则匹配方法封装,使代码模块化
pattern = re.compile('<li>.*?list_num.*?>(.*?)</div>.*?pic.*?src="(.*?)".*?/></a>.*?name"><a.*?title="('
'.*?)">.*?tuijian">(.*?)</span>.*?publisher_info.*?title="(.*?)".*?biaosheng.*?<span>('
'.*?)</span>.*?</li>', re.S) # 设定正则表达式匹配规则
items = re.findall(pattern, text) # 使用正则匹配对传入的text文本进行正则匹配,并将匹配成功的结果保存在items
return items # 将匹配的结果返回
if __name__ == "__main__":
target_url = "http://bang.dangdang.com/books/fivestars/" # 目标爬取的页面url
html = get(target_url) # 使用封装好的get方法将整个目标HTML页面爬取下来
for item in parse(html): # 使用封装好的正则匹配方法对目标HTML进行正则匹配,然后用一个循环将结果进行处理
print(item)
# 接下来是将结果写入txt文件的操作
with open('book.txt', 'a', encoding='UTF-8') as f:
f.write(json.dumps(item, ensure_ascii=False) + '\n') # 使用json库的dumps方法将列表对象转变成json对象(字符串),然后写入文本
f.close()
爬虫开发第一步:网页分析
爬虫开发的第一步,是对目标网页进行分析,首先要知道你需要的目标数据在哪里,这里使用开发者工具查看整个页面结构,发现目标数据在一个 <li>
元素中,所以开发思路是,将这个页面的数据获取下来,然后获取数据中的 <li>
元素(里面的有用的数据)。
爬虫开发第二步,数据爬取
经过第一步的分析,我们已经大致有了爬虫的思路了,所以现在要做的,就是把这个页面爬取下来。这时候 request 库出场了。使用 request 的 get()
方法,可以将目标页面的 html 爬下来。得到了目标页面的 html(代码中将其存储在 html 字符串中)。就可以进行接下来的操作了。
爬虫开发第三步,数据处理
使用正则表达式,匹配代码中的目标数据(也就是之前分析的li元素里的有用的数据)。并将其放进一个 items
列表中。完成到这一步,数据的爬取分析也就基本结束了。只要将爬取的结果进行保存就可以了。
爬虫开发第四步,数据保存
小编这里使用python自带的文件读写函数,将数据以json的格式保存在一个叫 book.txt
的文件中。
小结
现在大多数网页爬虫的开发方式基本都是上面的四步,python 的爬虫结构也大同小异。不过随着更多更好的工具出现,以及网站反爬意识的加强,最新的爬虫往往需要更好开发工具库和更多的配置。更多爬虫知识学习,可以前往 python课程进行学习(内有爬虫课程)。
注:小编警告,非法爬取网站数据,会对网站的日常运营造成一定的负担,这种行为也是违法行为,请勿恶意爬取别人的网站数据,在 python 爬虫的学习过程中也尽量少用较高次数的循环语句进行爬取!