<
>

网络爬虫(以豆瓣为例)

2020-07-20 23:56:32 来源:易采站长站 作者:

网络爬虫(以豆瓣为例)

1,应用pip install 命令语句安装环境。该步骤主要是在python原环境之后为自己提供一个比较和谐以及习惯的环境。如果习惯python原环境或是其他操作环境的朋友和忽略此操作,或是安装自己喜欢的环境进行操作。完成环境安装操作之后进入控制台根目录下输入jupyter notebookb并按下回车键后便可进行网络爬虫的具体操作了。注:新手朋友需注意一个小细节,控制台不能关闭,否则无法新建代码文件,笔者最初可是被这个小问题给绊倒过哦。

2,分析目标网站的网址结构,为数据的全面爬取提供便利。具体步骤如下:
在这里插入图片描述
然后利用简单的循环语句爬取目标网站的全部网址。

for page in range(0,226,25):
url = 'https://movie.douban.com/top250?start=%s&filter='%page
print (url)

运行后我们可得到豆瓣top250的电影网址。

[link](https://movie.douban.com/top250?start=0&filter=)
(https://movie.douban.com/top250?start=25&filter=)
(https://movie.douban.com/top250?start=50&filter=)
(https://movie.douban.com/top250?start=75&filter=)
(https://movie.douban.com/top250?start=100&filter=)
(https://movie.douban.com/top250?start=125&filter=)
(https://movie.douban.com/top250?start=150&filter=)
(https://movie.douban.com/top250?start=175&filter=)
(https://movie.douban.com/top250?start=200&filter=)
(https://movie.douban.com/top250?start=225&filter=)

3,正式爬取网页,请求源代码。这里需要用到一个叫requests的爬虫包,如果没有安装则可用pip install+包的名字在控制台中安装。

import requests
test_url = 'https://movie.douban.com/top250?start=0&filter='
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 Edg/80.0.361.111'
} #伪造浏览器
repones = requests.get(url =test_url,headers = headers).text
print (repones)

4,筛选无用信息(提取目的信息)此处需要用到lxml包,安装命令同上。

from lxml import etree
html_etree = etree.HTML(repones) #利用lxml解析上面爬取的html文件
#过滤
li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for a in li:
name = a.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0] print (name)

print (len(li)) #查看li的长度

5,爬去电影名称,电影网址,电影评分,电影评价人数,电影星级等。需要说明的是xpath后的网址内容都是豆瓣网站相应模块的网页源代码分析得到。

from lxml import etree
html_etree = etree.HTML(repones)
#过滤
li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for a in li:
#电影名称
name = a.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0] # print (name)
#链接
dy_url = a.xpath('./div/div[2]/div[1]/a/@href')[0] # print (dy_url)
#评分
rating = a.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0] # print (rating)
rating_num = a.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] # print (rating_num)
content = a.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0] print (content,name,dy_url,rating,rating_num)
print ("-"*50)

运行结果如下图所示,由于内容太多,只截取部分图片。
在这里插入图片描述
6,将爬取到的文件写入csv文件并保存到根目录。

import csv
#创建文件并打开文件
fp = open("./豆瓣TOP250.csv",'a',newline='',encoding = 'utf-8-sig')
writer = csv.writer(fp)
#写入内容
writer.writerow(('评价人数','名称','排名','链接','星级','评分'))
#关闭文件,不能存在于任何循环之中。
fp.close()

7,综合上述代码可以得到如下代码。

#导入所需的包
import requests,csv,re
from lxml import etree
test_url = 'https://movie.douban.com/top250?start=0&filter='
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 Edg/80.0.361.111'
} #伪造浏览器
#创建并打开文件
fp = open("./豆瓣TOP250.csv",'a',newline='',encoding = 'utf-8-sig')
writer = csv.writer(fp)
#写入内容
writer.writerow(('排名','评价人数','名称','链接','星级','评分'))

for page in range(0,226,25):
print ("正在获取第%s页"%page)
url = 'https://movie.douban.com/top250?start=%s&filter='%page
repones = requests.get(url =test_url,headers = headers).text
# print (repones)

html_etree = etree.HTML(repones)
#过滤
li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for a in li:
#电影名称
name = a.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0] # print (name)
#链接
dy_url = a.xpath('./div/div[2]/div[1]/a/@href')[0] # print (dy_url)
#网络排名
bank = a.xpath('./div/div[1]/em/text()')[0] # priny (bank)
#评分
rating = a.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0] # print (rating)
rating_num = a.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] # print (rating_num)
content = a.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0] content = re.sub(r'D',"",content)
# print (bank,content,name,dy_url,rating,rating_num,)
#写入内容
writer.writerow((bank,content,name,dy_url,rating,rating_num))
# 关闭文件
fp.close()

# print ("-"*50)
# len(li)) 查看长度

得到的最终产物如下所示,由于数据太多,只截取部分数据。
在这里插入图片描述
8,总结:
由于对正则表达式的学习不够熟练,所以不能成功的将星级用正确的方法表达出来。因此在本次实践过程中存在许多缺陷,希望在
下一篇博客之中能够补上。

作者:暮夜浅唱

暂时禁止评论

微信扫一扫

易采站长站微信账号