1、分析网页
当我们去爬取网页时,首先要做的就是先分析网页结构,然后就会发现相应的规律,如下所示:
生成链接:从网页链接的规律中可得写一个for循环即可生成它的链接,其中它的间隔为25,程序如下:
for page in range (0,226,25):
url ="https://movie.douban.com/top250?start=%s&filter="%page
print (url)
得到的结果如下:
2、请求服务器
在爬取网页之前,我们要向服务器发出请求
2.1导入包
没有安装requests包的要先进行安装,步骤为:1.win+R运行——2.cmd回车——3.输入命令pip install requests
2.2设置浏览器代理
设置浏览器代理的代码如下:
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
2.3请求服务器格式
请求源代码,向服务器发出请求,如果在后面加上.text表示输出文本内容,代码如下图所示:
requests.get(url = test_url, headers = headers)
2.4请求服务器代码汇总
import requests
#pip安转 pip install requests————>win+r,运行————>cmd,回车,————>pip
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.149 Safari/537.36'
}
#请求源代码,向服务器发出请求,200代表成功
reponse = requests.get(url = test_url, headers = headers).text
# 快捷键运行,Ctrl+Enter
3.xpath提取信息
3.1获取xpath节点的方法
3.2xpath提取内容
from lxml import etree #导入解析库
html_etree = etree.HTML(reponse) # 看成一个筛子,树状
3.2.1提取文本
当我们在提取标签内的文本时,要在复制的xpath后面加上/text()
如《霸王别姬》:
<span class="title">霸王别姬</span>
xpath为:
//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]
提取文字:
name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
print ("这是数组形式:",name)
print ("这是字符串形式:",name[0])
3.2.2提取链接
我们在提取链接时,需要在复制到的xpath后面加上/@href , 指定提取链接,
movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
print ("这是数组形式:",movie_url)
print ("这是字符串形式:",movie_url[0])
结果如下:
3.2.3提取标签元素
提取标签元素和提取链接的方法一样,不过要在后面加上 /@class 就可以了,
rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')
print ("这是数组形式:",rating)
print ("这是字符串形式:",rating[0])
结果如下:
4.正则表达式
4.1提取固定位置的信息
正则表达式中用(.*?)来提取我们想要的信息,在使用正则表达式时,通常要先导入re这个包,举例如下:
import re
test = "我是js"
text = re.findall("我是.*?",test)
print (text)
结果如下:
4.2匹配出数字
比如说我们要匹配出有多少人评价这部电影,我们可以这样写:
import re
data = "1059232人评价"
num = re.sub(r'\D', "", data)
print("这里的数字是:", num)
结果如下:
5、提取一页中的所有信息
比如说我们这里提取最后一页的电影名称,如下:
li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for item in li:
name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
print (name)
结果如下:
按照这种方法,我们可以把所有的都爬取下来。
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
#设置浏览器代理,它是一个字典
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
# 创建文件夹并打开
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入
# 写入内容
writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))
for page in range(0, 226, 25): #226
print ("正在获取第%s页"%page)
url = 'https://movie.douban.com/top250?start=%s&filter='%page
#请求源代码,向服务器发出请求,200代表成功,回退对其,Ctrl+]
reponse = requests.get(url = url, headers = headers).text
# 快捷键运行,Ctrl+Enter
html_etree = etree.HTML(reponse) # 看成一个筛子,树状
# 过滤
li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for item in li:
#排名
rank = item.xpath('./div/div[1]/em/text()')[0]
#电影名称
name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
#链接
dy_url = item.xpath('./div/div[2]/div[1]/a/@href')[0]
#评分
rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]
rating = re.findall('rating(.*?)-t', rating)[0]
if len(rating) == 2:
star = int(rating) / 10 #int()转化为数字
else:
star = rating
# 注释ctrl+?
rating_num = item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0]
content = item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]
content = re.sub(r'\D', "", content)
# print (rank, name, dy_url, star, rating_num, content)
# 写入内容
writer.writerow((rank, name, dy_url, star, rating_num, content))
fp.close()
结果如下:
csv文件中的结果:
最后爬取结束。
最后:如果你对Python感兴趣,想要学习Python,希望可以帮到你,一起加油!以上是给大家分享的Python全套学习资料,都是我自己学习时整理的:
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频全套
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
**学习资源已打包,需要的小伙伴可以戳这里:【学习资料】