文章采集调用(如何网页访问?豆瓣网教你如何获取真正请求的地址?(图))

优采云 发布时间: 2021-11-10 00:07

  文章采集调用(如何网页访问?豆瓣网教你如何获取真正请求的地址?(图))

  【一、项目背景】

  豆瓣影业提供最新的电影介绍和影评,包括正在放映的电影的视频查询和购票服务。顺便可以录下想看的电影和电视剧,看,看,还可以写影评。它极大地方便了人们的生活。

  今天以电视剧(美剧)为例,批量抓取对应的电影,写入csv文件。用户可以通过评分更好地选择自己想要的电影。

  【二、项目目标】

  获取对应的电影名称、评分、详情链接,下载电影图片,保存文件。

  [三、 涉及的图书馆和 网站]

  1、 网址如下:

  %E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}

  2、 涉及的库:requests****、fake_useragent、json****、csv

  3、软件:PyCharm

  【四、项目分析】

  1、如何请求多个页面?

  当您单击下一页时,每增加一页,paged 将增加 20。使用{}替换转换后的变量,然后使用for循环遍历URL实现多个URL请求。

  2、如何获取实际请求的地址?

  在请求数据时,发现页面上没有对应的数据。其实豆瓣是通过javascript动态加载内容来防止采集的。

  1)F12 右键查看,在左侧菜单中找到Network,Name,找到第五个数据,点击Preview。

  

  2) 点击subjects,可以看到title是对应电影的名字。率是相应的分数。通过js解析subjects字典,找到需要的字段。

  

  如何访问网页?

  %E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0

  %E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=20

  %E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=40

  %E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=60

  单击下一页时,每增加一页,该页将增加 20。使用{}替换转换后的变量,然后使用for循环遍历URL实现多个URL请求。

  【五、项目实施】

  1、 我们定义一个类继承对象,然后定义init方法继承self,再定义一个main函数main继承self。导入所需的库和请求 URL。

  导入请求,json

  从 fake_useragent 导入 UserAgent

  导入 csv

  类多班(对象):

  def __init__(self):

  self.url = ";tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"

  定义主(自我):

  经过

  如果 __name__ =='__main__':

  Siper = Doban()

  Siper.main()

  2、 随机生成UserAgent,构造请求头,防止反爬。

  对于范围内的 i(1, 50):

  self.headers = {

  '用户代理':ua.random,

  }

  3、发送请求,获取响应,页面回调,方便下次请求。

  def get_page(self, url):

  res = requests.get(url=url, headers=self.headers)

  html = res.content.decode("utf-8")

  返回 html

  4、json 解析页面数据,获取对应的字典。

  数据 = json.loads(html)['主题']

  #打印(数据[0])

  5、进行遍历,获取对应的电影名,评分,链接到下一个详情页。

  打印(名称,妖精赫夫)

  html2 = self.get_page(goblin_herf) # 第二个请求发生

  parse_html2 = etree.HTML(html2)

  r = parse_html2.xpath('//div[@class="entry"]/p/text()')

  6、创建一个用于写入的csv文件,定义对应的header内容,并保存数据。

  # 创建一个用于写入的csv文件

  csv_file = open('scr.csv','a', encoding='gbk')

  csv_writer = csv.writer(csv_file)

  # 写入csv标题内容

  csv_writerr.writerow(['电影','评级',"详细页面"])

  #数据输入

  csv_writer.writerow([id, rate, url])

  7、图片地址提出请求。定义图片的名称并保存文档。

  html2 = requests.get(url=url, headers=self.headers).content

  目录名 = "./图片/" + id + ".jpg"

  with open(dirname,'wb') as f:

  f.write(html2)

  print("%s [下载成功!!!]"% id)

  8、 调用方法来实现功能。

  html = self.get_page(url)

  self.parse_page(html)

  9、项目优化:

  1) 设置时间延迟。

  time.sleep(1.4)

  2) 定义一个变量u,用于遍历,表示爬取的是哪个页面。(更清晰,更令人印象深刻)。

  u = 0

  self.u += 1;

  【六、效果展示】

  1、 点击绿色三角进入起始页和结束页(从第0页开始)。

  

  2、 在控制台显示下载成功信息。

  

  3、保存csv文件。

  

  4、电影图片显示。

  

  [七、总结]

  1、 不建议抓太多数据,可能造成服务器负载,简单试一下。

  2、本文章针对Python爬取豆瓣应用中的难点和关键点,以及如何防止反爬,做了一个相对的解决方案。

  3、希望通过这个项目,可以帮助大家了解json解析页面的基本流程,如何拼接字符串,如何使用format函数。

  4、 本文基于Python网络爬虫,利用爬虫库实现豆瓣电影及其图片的获取。说到实现,总会有各种各样的问题。不要看最好的,努力去更深入地理解。

  5、需要本文源码的可以在后台回复“豆瓣电影”获取。

  ****看完这篇文章你有收获吗?请转发并分享给更多人****

  IT共享之家

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线