由于本人爬取豆瓣影评的时候,我想爬取的比较完善,因为我看大多都是爬取短评而已,本人想爬取其他内容所以写下这篇,希望对大家有帮助。 一、pip对库的调用 下载命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +库名 需要安装的库有 re,requests 内建库(time,random) 图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200807211846778.png)
二、确认网站是什么类型 判断网页时动态的还是静态的可以点击右键,查看网页源代码, 复制“西楼尘”三个字在网页源代码中,具体方法时ctrl+f 搜索,如果在网页源代码有内容提示的话(高亮题目) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200807214810641.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RYR0RYWg==,size_16,color_FFFFFF,t_70)
基本就是可以确定时静态的(可以多复制其他内容实验一下)。通过这里可以知道该网站时静态的。 三、查询数据来源 我搜索的是“寄生兽”所以网址:https://movie.douban.com/subject/27010768/comments?start=0;limit=20;sort=new_score;status=P 可以看到有五个数据是我们想要的,然后打开网页源代码 通过re匹配抓取到 点赞人数,用户名,评分,发布时间,短评 但这个网页还需要抓取到 发布城市,加入时间也可以通过re正则爬取到。 点击链接,打开 找到想抓去内容 7个数据就可以抓取下来了。 四、代码部分`
import re
import requests
import time
import random
def get_url(url):
headers={
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
"Cookie":'你的cookie' #尝试过很多用反爬手段这种是最简单的反爬了
}
try:
html=requests.get(url,headers=headers)
html.raise_for_status()
text=html.text
return text
except:
print("爬取失败")
#1.点赞人数,2.用户名,3.评分,4.时间,5.短评
def prase_url(url):
text=get_url(url)
content = re.compile(r'.*? (.*?).*?.*?'
r' .*?.*? '
r'(.*?)',re.S)
results = re.findall(content, text)
for i in results:
yield i
#1、发布城市 2、加入时间
def get_newurl(url):
text = get_url(url)
content = re.compile('.*?',re.S)
results = re.findall(content, text)
for new_url in results:
new_text=get_url(new_url)
new_content = re.compile('.*?(.*?).*?.*?(.*?)', re.S)
new_results = re.findall(new_content, new_text)
for i in new_results:
yield i
def main():
for i in range(0,25):
print("正在爬取第{}页".format(i+1))
url="https://movie.douban.com/subject/27010768/comments?start="+str(i*20)+"&limit=20&sort=new_score&status=P"
for i,s in zip(get_newurl(url),prase_url(url)):
with open('job.csv', 'a+', encoding='gb18030') as fh:
# 处理避免读取歧义
fh.write(i[0].replace(',','、') + "," + i[1] + "," + s[0]+ "," + s[1] + "," + s[2] + ',' + s[3] +','+s[4]+ "\n")
time.sleep(random.random())
print(i,s)
if __name__=="__main__":
main()
注:编码格式方面建议不要用utf-8-sig因为出现乱码,cookie要用你本人的 需要在.py文件下新建job.csv文件,此时可查询并分析 爬取发布城市,加入时间会挺久的,因为是从一个网页到另一个网页,如果有更好的方法,可以私聊谈一下 这是本人第一次写的代码可能不太好,有什么可以私信我
|