鱼C论坛

 找回密码
 立即注册
查看: 2444|回复: 2

[已解决]关于爬虫中模糊匹配的问题

[复制链接]
发表于 2020-4-28 22:47:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先上代码:
  1. # encoding='utf-8'
  2. import requests
  3. from lxml import etree
  4. # 1,将目标网站的页面抓取下来
  5. headers = {
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
  7.     'Referer': 'https://www.baidu.com/link?url=0PXP5LpEAo5sw9eV3szzkv2pdM8sRdu2Onq3KmH0iwiD5VaokhlLh3-FktgLZRyz&wd=&eqid=af84e97900036a20000000065ea83f39',
  8.     'Upgrade-Insecure-Requests': '1'
  9. }
  10. url = 'https://movie.douban.com'

  11. response = requests.get(url, headers=headers)
  12. text = response.text

  13. # 2,将抓取下来的数据根据一定的规则进行提取

  14. html = etree.HTML(text)     # 返回的是一个HTML对象

  15. ul = html.xpath("//div[contains(@data-index, '0')]")        # 模糊匹配
  16. print(ul)
复制代码


实际运行过程中,ul返回值为空列表,但是用网页的xpath却能得到数据,不知道什么原因了,请高人指教,谢谢
最佳答案
2020-4-29 17:55:22
本帖最后由 颜栩栩 于 2020-4-29 17:58 编辑

首先来说说你查询到的结果为什么为空。其实你的代码语法写的完全没有问题,在浏览器中也能获取到信息。
只是你在html = etree.HTML(text) 这里获取到的源码,和你在浏览器上看到的源码不完全一样。
你想要的信息,豆瓣不愿意让爬虫看到呀~这里我们获取的html如下图:
见附件图2
看下浏览器中原本的html,是这样的,是不是你想要的信息都在这了:
见附件图1
这部分呈现在我们视觉中的效果也就是这样的:
见附件图0


那么 你要的数据到底怎么样才能得到呢?
可以从network里看到,数据是存在这个地方的:
见附件图4
通过以下代码,获取一个dict格式的信息~
  1. import requests
  2. import json

  3. url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0"

  4. payload = {}
  5. headers = {

  6.   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
  7. }

  8. response = requests.request("GET", url, headers=headers, data = payload)

  9. json1 = json.loads(response.text)
  10. print (json1['subjects'][0]['title'])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 17:55:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 颜栩栩 于 2020-4-29 17:58 编辑

首先来说说你查询到的结果为什么为空。其实你的代码语法写的完全没有问题,在浏览器中也能获取到信息。
只是你在html = etree.HTML(text) 这里获取到的源码,和你在浏览器上看到的源码不完全一样。
你想要的信息,豆瓣不愿意让爬虫看到呀~这里我们获取的html如下图:
见附件图2
看下浏览器中原本的html,是这样的,是不是你想要的信息都在这了:
见附件图1
这部分呈现在我们视觉中的效果也就是这样的:
见附件图0


那么 你要的数据到底怎么样才能得到呢?
可以从network里看到,数据是存在这个地方的:
见附件图4
通过以下代码,获取一个dict格式的信息~
  1. import requests
  2. import json

  3. url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0"

  4. payload = {}
  5. headers = {

  6.   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
  7. }

  8. response = requests.request("GET", url, headers=headers, data = payload)

  9. json1 = json.loads(response.text)
  10. print (json1['subjects'][0]['title'])
复制代码
0.png
1.jpg
2.jpg
4.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 22:25:43 | 显示全部楼层
我也是后面才弄懂的,匹配不到就看源码,因为一直是自己学,经常卡在一些简单的问题上,惭愧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表