一、介绍
爬取猫眼电影的翻版,练练手的同时也有新发现
二、流程
用浏览器打开糗事百科,分析站点
抓取单页内容
利用Requests请求目标站点,得到单个网页HTML代码,返回结果正则表达式分析
根据HTML代码分析得到的用户名称、段子文本、点赞人数、评论人数等信息
保存至文件
通过文件的形式将结果保存,每一部电影一个结果一行Json字符串开启循环及多线程
对多页内容遍历,开启多线程提高抓取速度 ,这里为了保证获取文本信息格式的一致性,我就没有不用多线程了
三、代码
import requests
import re
import json
from requests.exceptions import RequestException
import time
def get_one_page(url):
use_agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
Headers={'User-Agent':use_agent}
#如果不加报头直接抓取源代码似乎会报错,所以我伪装了一下,打开chrome进入糗事百科,再右键打开检查->network->request headers,把User-Agent复制了
try:
response=requests.get(url,headers=Headers)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
pattern = re.compile('<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?<i cla'
+ 'ss="number">(.*?)</i> (.*?)</span>.*?<i class="number">(.*?)</i>(.*?)</a>', re.S)
items=re.findall(pattern,str(html)) #这里要对html用str()函数,不然会报错 TypeError: expected string or bytes-like object
#print(items)
for item in items:
yield {
'name':item[0].strip(),
'text':item[1].replace("<br/>",",").strip(), #替换掉网页中的<br/>转行标签,去掉换行符
'vote':(item[2]+item[3]),
'comments':(item[4]+item[5]).strip()
}
def write_to_file(content):
with open('result.text','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
f.close()
def main():
for i in range(1, 14):
url = 'https://www.qiushibaike.com/hot/page/' + str(i) #把循环放在这里,不要弄在main()里
print('当前处理页数:',i)
get_one_page(url)
html=get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
time.sleep(3)
if __name__=='__main__':
main() #这是标准的main格式
四、最后得到的text文件
五、总结
1.磕磕碰碰的做出来,很开心
2.在这里非常感谢皮皮哥、风、Luffy等大佬的悉心指导