专业的网页设计和网站建设公司,网站稳定性,清新区住房和城乡建设部网站,网站被模仿文章目录 前言分析与实现1.对豆瓣网网站进行Ajax分析2.发送请求3.进一步筛选#xff08;提取#xff09; 完整代码 前言
通过这个项目#xff0c;可以让小白对爬虫有一个初步认识#xff0c;爬取豆瓣top250是一个初学者学爬虫的必经之路#xff0c;话不多说#xff0c;我… 文章目录 前言分析与实现1.对豆瓣网网站进行Ajax分析2.发送请求3.进一步筛选提取 完整代码 前言
通过这个项目可以让小白对爬虫有一个初步认识爬取豆瓣top250是一个初学者学爬虫的必经之路话不多说我们开始吧
分析与实现
1.对豆瓣网网站进行Ajax分析
对豆瓣电影top250网站进行检查可以在网络部分看到该页数据的请求头信息 需要注意的是我们要爬取的页面数据文件是top250这个文件判断需要从哪个包中提取数据可以在响应里看到
2.发送请求
import requests# 发请求测试
response requests.get(https://movie.douban.com/top250)
print(response)会得到418的状态码就是豆瓣会拒绝我们的访问
这是因为服务器没有识别到我们是用户端所以为了保证网站数据的安全将我们拒之门外。那么我们就需要对自己进行一些简单的伪装。
这里也是需要IP地址的 可以从以下方法获取IP地址
UAuser-agent伪装是我本次采用的伪装策略也是最简单的伪装策略有些网站的反爬机制比较复杂则需要采用更加复杂的反反爬机制来进行伪装不过对于豆瓣来说UA伪装就够用了。
那么我们现在给我们的请求带一个请求头并且请求头中带一个User-agent信息这个信息可以在检查页面的请求头信息Headers里找到如下所示 填入代码中
import requests# 发请求测试网站反爬机制
headers {User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1}
response requests.get(https://movie.douban.com/top250,headersheaders)
print(response)状态码就为200说明响应成功这个时候我们已经爬到我们想要的数据了 然后就可以直接答应出来我们想要的数据
3.进一步筛选提取
这里我使用的方法是python正则式所以我们需要先分析html代码的结构这里需要一点前端知识但是因为爬虫的前导知识是前端开发因此默认大家都是能看懂的。
通过观察我们可以发现电影标题包含在这个类里所以我们可以使用正则式将它匹配出来
span classtitle(.*?)/span代码
import retitle re.findall(span classtitle(.*?)/span, response.text,re.S)提取完之后我们需要对不干净的数据进行筛选这一步可以省略详见于完整代码。
其他信息也按照这个逻辑提取出来这里我提取了题目、国籍、上映时间这三个数据大家可以根据自己的需要去提取。
完整代码
使用正则表达式的代码
import requests
import re爬取豆瓣电影top20
def top250_crawer(url, sum):headers {User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1}response requests.get(url, headersheaders)print(response.text)title re.findall(span classtitle(.*?)/span, response.text,re.S)new_title []for t in title:if nbsp;/nbsp not in t:new_title.append(t)data re.findall(br(.*?)/p, response.text, re.S)time []country []for str1 in data:str1 str1.replace( , )str1 str1.replace(\n, )time_data str1.split(nbsp;/nbsp;)[0]country_data str1.split(nbsp;/nbsp;)[1]time.append(time_data)country.append(country_data)print(len(new_title))print(len(time))print(len(country))for j in range(len(country)):sum 1print(str(sum). new_title[j] , country[j] , time[j])url https://movie.douban.com/top250
sum 0
遍历10页数据250条结果
for a in range(10):if sum 0:top250_crawer(url, sum)sum 25else:page ?start str(sum) filternew_url url pagetop250_crawer(new_url, sum)sum 25就提取到我们想要的内容了