抓取网页数据( 目标确定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,除了,结果如下:

  

  爬行完成!

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线