一般来讲,简单的爬虫,主要是做两件事
- 1 - 获取网页内容
- 2 - 分析网页内容 对于python而言,常常使用
requests
库去做1(获取网页内容 ),
使用BeautifulSoup
库或者re
库做2(分析网页内容)
一、获取网页内容 (使用requests
)
对于简单的网页,不需要登录的那种,获取起来很简单
代码如下
import requests
def get_url_html(url):
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
二、分析网页内容 (BeautifulSoup
或者re
)
0 - 概述
BeautifulSoup
和re
到底哪个更好用,这要看网页的具体情况。
这里简单的说一下个人观点(不过估计新手不是很容易看懂,不懂建议直接跳过,用的多了自然就有感觉):
BeautifulSoup
适合元素层次清晰的网页,尤其是需要获取多个层次的元素信息的时候。re
适合格式清晰的网页,更适合去获取同一格式的信息。
分析网页内容常常又分为两步。
- 1 - 获取网页中自己所需要的url列表
- 2 - 对url再次重复获取 + 分析
因为直接从网页中一次获取自己所要的最终信息这种简单情况比较少。
举两个例子:
1, 比如爬取某个博客,在主页只能先获取文章基础信息列表, 只有对这些文章的url进一步爬取才能获取具体文章信息。
2, 再比如爬取某网页图片,在主页先获取所有想要的图片的url,有了这些url还要再次用request请求获取图片内容才能进行本地保存。
所以本部分的代码套路常常如下
def parse_main_html(html):
...
return some_urls_of_html
def parse_sub_html_and_handle(sub_html):
...
if __name__ == '__main__':
url = "..."
html = get_url_html(url)
url_list= parse_main_html(html)
res = []
for sub_url in url_list:
sub_html = get_url_html(sub_url )
parse_sub_html(html)
2 - 使用BeautifulSoup
分析网页内容
开头导入
from bs4 import BeautifulSoup
获取到html
后,先使用以下语句将html
解析成BeautifulSoup
对象。
soup = BeautifulSoup(html, "html.parser")