一、所需要用到的Python库
- re
re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分。 - requests
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。 - beautifulsoup
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
其中BeautifulSoap的安装为pip install beautifulsoup4 当然也可以根据需要,继续安装lxml 和 html5lib,具体可以参考其他文档。
二、爬取网页相关内容,以微博为例
- 明确自己想要爬取的网页(以下图为例)。
网址:https://weibo.com/2656274875/JcnqqgXnC?refer_flag=1001030103_&page=2&type=comment
右键查看微博源代码
查看我们要的内容在哪里,有的需要正文,有的需要评论等。
补充:
微博其实有多种查看方式,在各种教程中也有讲解,一般我们看到的是网页版,也就是上图所示的形式,其网页大多为weibo.com。但是改用weibo.cn版难度将降低,因为代码更简洁
- 代码。
这里放的是爬微博评论的代码。我们需要明确我们爬的内容在哪一部分。
我们发现评论全部在class为ctt的span里,故利用soup.find_all(‘span’, class_=‘ctt’)找到所有评论。找到内容是包括这些<>代码的,所以还需要利用正则匹配去找到文字。
import re
import requests
from bs4 import BeautifulSoup
cookie = {"Cookie":"Your Cookie!!!!"}
def GetText_WB_COM(URL,filePath):
fp = open(filePath, 'w', encoding='utf8')
# 抓取web页面
fp.write(URL)
fp.write("\n\n")
res = requests.get(URL,cookies=cookie)
status_code=res.status_code
if status_code/100 != 2:
return status_code
res.encoding = 'utf-8'
soup = BeautifulSoup(res.content,"lxml")
#print(soup)
links = soup.find_all('span', class_='ctt')
# link的内容就是span
for link in links:
print(GetContent(link))
#print(link)
def GetContent(text):
if '回复' in str(text):
result = re.findall("</a>:(.*?)<", str(text))
else:
result = re.findall("<span class=\"ctt\">(.*?)<",str(text))
value = result[0]
if len(value)>1:
return value
print(GetText_WB_COM('https://weibo.cn/2656274875/JcnqqgXnC?refer_flag=1001030103_&page=2','GetText3.txt'))
- 最终效果
- 补充说明
①关于cookie的获取,登录微博后,进入浏览器开发者工具。
找到network,刷新页面(如下图即可找到cookie)。
②相关代码说明
这里关于正则匹配和beautifulsoap的讲解不多,是因为已经有很多文档来讲这个了,而且也比博主了解的更透彻,所以这里就不再赘述。这方面有疑问,可以自行去查阅网络上的其他文档。
③内容说明
这里是以微博评论为例,其他的也是可以依葫芦画瓢,找到自己要爬取的内容所属的结构。