抓取网页数据( 目标确定2019精品新片的前10页所有电影的名字 )
优采云 发布时间: 2021-10-07 15:11抓取网页数据(
目标确定2019精品新片的前10页所有电影的名字
)
一、开始
在花了将近半年的空闲时间学习了Python的基本语法之后,我开始尝试网络爬虫。学习了一个星期,在我开始爬相对较小的网页并尝到甜头后,我疯狂地搜索各种网络爬虫。当然,我也被各种虐——!
于是决定仔细复习一下之前的笔记,记录下爬取的网页和方法,写个博客,方便以后复习。当然,如果有朋友比我是爬虫新手,我可能会从这些基础中获得一些积分。~
二、工具(Python)依赖requestsxpath的库三、目标确定
抢2019精品新片前10页所有电影的片名和电影海报(有兴趣的可以加磁力链接,同样不难)
三、URL分析和整体层次分析
爬行思维层次分析——由内而外:
解析单个电影 url 以检索电影名称和电影海报。定义一个 def 来返回页面中所有需要获取的电影的 URL。定义一个def,输入那个页面的total_url,返回一个url列表,然后遍历url,把url丢进1的函数中,遍历10页,定义main函数结合1、2函数
网址分析
进入单部电影的页面,右击查看。从元素中很容易找到电影名称和海报的位置。
电影名提取的地方很多,就不一一解释了
通过 xpath 语法解析
可以看到xpath匹配了两个图片信息,第二个是视频截图,我们只需要第一个。
total_url 分析
提取出单部电影所需的信息后,分析如何从一个页面抓取所有电影网址。以第一页为例,目标抓取提取第一页的所有URL
右击查看,将元素定位工具放置在任意影片位置,可以找到如下
这样除了每部电影的url位置,通过xpath匹配
OK,此时可以说已经获取了一页(total_urls)中所有URL中的电影点播信息。
下一步是分析10个页面的爬行。
遍历 10 页分析
此时,观察前两页的网址,就可以找到规律了。您只需要使用圆作为偏移量即可完成要求。好了,分析完毕。
代码:
在贴代码之前需要注意:我们都知道response.text或者response.content通常是在请求请求之后使用。这里我选择第二个。Movie Paradise的源码不够规范,所以我们手动解码,打开一部电影url的源码,ctrt+F输入'charset'可以找到如下图
网页是用gbk编码的,所以我们解码的时候用decode('gbk')。
代码显示如下
# -- 1 对电影天堂url规律分析
from lxml import etree
import requests
x = 0
y = 0
movies = []
HEARDERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'Accept-Language':'zh-CN,zh;q=0.9'
}
frist = 'https://www.dytt8.net'
def get_detail_urls(url):
"""获取一页的电影"""
global y
response = requests.get(url, headers=HEARDERS)
text = response.text # 去网页源代码查看编码方式
html = etree.HTML(text) # 解析成HTML代码对象
detail_urls = html.xpath("//table[@class='tbspan']//a/@href") # 返回list
detail_urls = map(lambda url:frist+url,detail_urls) # 将每个detail_urls元素都放进lambad函数里面执行一遍
y += 1
print('='*30)
print('第{}页开始爬取!'.format(y))
print('=' * 30)
return detail_urls
def parse_detail_page(url):
global x
movie={}
response = requests.get(url,headers=HEARDERS)
text = response.content.decode('gbk')
html = etree.HTML(text)
title = html.xpath("//div[@class='title_all']//font/text()")[0] # 电影名
img = html.xpath("//p/img/@src")[0]
movie['电影名'] = title
movie['海报'] = img
x += 1
movies.append(movie)
print('第{}部电影爬取完毕!'.format(x))
def main():
"""爬取前5页"""
global x
for i in range(1,11): # 控制页数
url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'.format(i)
detail_urls = get_detail_urls(url) # return详细电影页面list
for detail_url in detail_urls:
# 该for循环遍历一页中所有电影的详情
try:
movie = parse_detail_page(detail_url) # 处理单个电影url
except:
print('爬取失败')
x += 1
if __name__ == '__main__':
main()
print('爬取完毕,共{}部电影'.format(x))
print(movies)
结果如下,没有做数据存储链接,主要是整理爬虫的思路
期间某部电影返回索引错误,--~于是看了几分钟那部电影,检查贴如下:
果然是空索引!!!--silent,然后加一个try,除了,结果如下:
爬行完成!