鱼C论坛

 找回密码
 立即注册
查看: 1310|回复: 16

[已解决]爬虫文件的问题

[复制链接]
发表于 2018-12-12 15:27:29 | 显示全部楼层 |阅读模式

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

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

x
1. 是不是爬取属性值用的get命令,而获取文本则用find命令?
2. 用find命令获取文本时,有时候可以正常运行,有时候却会出错。。
比如,我爬取一个网页时会有这样的错误提示: 微信图片_20181212152431.png
而有时候,又会提示另外的错误: 图片1.png
我有点迷糊,为什么会有这样的问题。。这个find到底该怎么用了。。
最佳答案
2018-12-13 14:07:50
  1. import pandas as pd
  2. import requests as res
  3. from bs4 import BeautifulSoup as bs

  4. url = 'https://news.sina.com.cn/'
  5. head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}
  6. res1 = res.get(url,headers = head)
  7. res1.encoding = res1.apparent_encoding
  8. soup = bs(res1.text,'lxml')
  9. cont = soup.find('div',class_='ct_t_01')
  10. print([x.text for x in cont.find_all('h1',attrs = {'data-client':'headline'})])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-12 15:42:45 | 显示全部楼层
2你用的是BeautifulSoup的find么

有-识别成表达式,请用这种soup.find('div',attrs={"data-foo": "value"})参照
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-12 15:43:48 | 显示全部楼层
是bs4吗??
问题能详细的描述吗??
看得云里雾里的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 09:57:56 | 显示全部楼层
wongyusing 发表于 2018-12-12 15:43
是bs4吗??
问题能详细的描述吗??
看得云里雾里的

感觉你们都是大神啊。。的确是用的bs4.。
我水平很低,有问题也没描述清楚。。
我刚开始学爬虫,发现用这个find语句,有时候可以,有时候又提示有问题。。不知道到底原因出在哪里。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 10:01:37 | 显示全部楼层
塔利班 发表于 2018-12-12 15:42
2你用的是BeautifulSoup的find么

有-识别成表达式,请用这种soup.find('div',attrs={"data-foo": "value ...

是用的BeautifulSoup的find.
这个find命令,我感觉不会用。。一会可以正常出效果。。一会又提示错误。。我很迷糊。。
就比如我自己试着爬取新浪的新闻内容,爬取到h1标签,属性data-client的文本时,按照我的理解方式来输入时,却提示不应该是表达式。。我搞不懂了,为什么这个data-client成了表达式了。。这种情况下,又该如何进行定位呢?(如果是class的属性,貌似是用class加个下划线来解决的)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-13 10:04:14 | 显示全部楼层
老笨啊 发表于 2018-12-13 09:57
感觉你们都是大神啊。。的确是用的bs4.。
我水平很低,有问题也没描述清楚。。
我刚开始学爬虫,发现用 ...

去bs4文档哪里学select方法吧。  
大多数情况下比bs4的find方法简单,无脑。  
学成归来就拥有了PyQuery解析器的技能了
相当于学了两个解析器
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-13 10:07:34 | 显示全部楼层
老笨啊 发表于 2018-12-13 10:01
是用的BeautifulSoup的find.
这个find命令,我感觉不会用。。一会可以正常出效果。。一会又提示错误。。 ...

网站是为了反扒做的简单措施,
你利用属性就行了,就像我上面用的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 11:13:57 | 显示全部楼层
塔利班 发表于 2018-12-13 10:07
网站是为了反扒做的简单措施,
你利用属性就行了,就像我上面用的

我按照你的格式做了下,貌似还是报错啊:
1544670652(1).png

新浪的原页面代码是这样的:
sina.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-13 11:15:43 | 显示全部楼层
老笨啊 发表于 2018-12-13 11:13
我按照你的格式做了下,貌似还是报错啊:

你把代码都发出来,我看着改改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 13:37:55 | 显示全部楼层
塔利班 发表于 2018-12-13 11:15
你把代码都发出来,我看着改改

  1. import pandas as pd
  2. import requests as res
  3. from bs4 import BeautifulSoup as bs

  4. url = 'https://news.sina.com.cn/'
  5. head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}
  6. res1 = res.get(url,headers = head)
  7. res1.encoding = res1.apparent_encoding
  8. soup = bs(res1.text,'lxml')
  9. cont = soup.find('div',class_='ct_t_01')
  10. # print(cont)
  11. l = []
  12. for i in cont:
  13.     tit = i.find('h1',attrs = {'data-client':'headline'}).text
  14.     #content = i.find_all('h1',data-client = 'throw').text
  15.    
  16.     l.append(tit)
  17. print(l)
复制代码


我这个代码没写完,只是先写一部分运行看下有没问题,结果出了这档子事。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-13 14:07:50 | 显示全部楼层    本楼为最佳答案   
  1. import pandas as pd
  2. import requests as res
  3. from bs4 import BeautifulSoup as bs

  4. url = 'https://news.sina.com.cn/'
  5. head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}
  6. res1 = res.get(url,headers = head)
  7. res1.encoding = res1.apparent_encoding
  8. soup = bs(res1.text,'lxml')
  9. cont = soup.find('div',class_='ct_t_01')
  10. print([x.text for x in cont.find_all('h1',attrs = {'data-client':'headline'})])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 14:34:55 | 显示全部楼层

看起来你的代码和我的差不多啊。。
为啥我的就出错呢。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-13 14:42:53 | 显示全部楼层
for i in cont:
    print(type(i))
你就知道了,不都是tag,所以find按特殊字符串就不是标签的find了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 15:34:17 | 显示全部楼层
wongyusing 发表于 2018-12-13 10:04
去bs4文档哪里学select方法吧。  
大多数情况下比bs4的find方法简单,无脑。  
学成归来就拥有了PyQuer ...

这个bs4的文档哪里有?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 15:35:10 | 显示全部楼层
wongyusing 发表于 2018-12-13 10:04
去bs4文档哪里学select方法吧。  
大多数情况下比bs4的find方法简单,无脑。  
学成归来就拥有了PyQuer ...

这个bs4的文档哪里有?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-13 16:11:12 | 显示全部楼层
老笨啊 发表于 2018-12-13 15:35
这个bs4的文档哪里有?

谷歌一下  python bs4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 13:48:23 | 显示全部楼层
wongyusing 发表于 2018-12-13 16:11
谷歌一下  python bs4

好的,多谢了~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-1 15:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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