requests和bs4爬取电影top250
本帖最后由 今天的我更强了 于 2020-6-29 10:14 编辑import requests
import bs4
url='https://movie.douban.com/top250'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
res=requests.get(url,headers=headers)
soup=bs4.BeautifulSoup(res.text,'html.parser')
targets=soup.find_all('div',class_='hd')
for each in targets:
print(each.a.span.text)
这个代码只会把电影名称爬取下来
改成这样:
targets=soup.find_all('span',class_='title')
for each in targets:
print(each.text)
却会把下面的英文爬取下来
审查元素如下:
<div class="hd">
<aclass="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港)/刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
第一个为什么不会打印英文字母?求大佬指教 哈哈哈你怎么又这样发图了 {:10_250:} Twilight6 发表于 2020-6-29 10:14
哈哈哈你怎么又这样发图了
我想发截图却不会..所以重新编辑了一下{:10_266:} 第一个找到的是class为hd的div标签,打印的是div的子a标签的第一个子span标签的text。
第二个则是直接找到的class为title的span标签,打印出来的text就是标题。 qiuyouzhi 发表于 2020-6-29 10:24
第一个找到的是class为hd的div标签,打印的是div的子a标签的第一个子span标签的text。
第二个则是直接找到 ...
就是说第一种方式只会打印第一个而第二种方式会全部打印吗? 本帖最后由 Twilight6 于 2020-6-29 10:49 编辑
print(each.a.span.text)
这样的用法就是只打印第一个
print(each.text)
这样是把你变量到each 标签里的 文本内容全部打印
beautifulsoup4 这样使用时候 相同的标签只能获取第一个符合要求的标签,你第一个指定的div 里面 span 标签 ,而第二个指定的是 span 标签
而span 标记都是同缩进的 也就是说他们每一个都算第一个符号要求的标签
Twilight6 发表于 2020-6-29 10:44
这样的用法就是只打印第一个
懂了谢谢 今天的我更强了 发表于 2020-6-29 10:54
懂了谢谢
{:10_281:} Twilight6 发表于 2020-6-29 10:54
大佬 我能再问一下:
import requests
import bs4
url='https://movie.douban.com/top250'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
res=requests.get(url,headers=headers)
soup=bs4.BeautifulSoup(res.text,'html.parser')
targets=soup.find_all('a')
print(targets)
for each in targets:
print(each.span.text)
这个地方换成a 为什么'NoneType' object has no attribute 'text' 会这样报错? 今天的我更强了 发表于 2020-6-29 11:22
大佬 我能再问一下:
import requests
import bs4
因为没爬取到你的 each标签里的 span 导致 返回的是 None也就是 each.span.text 变成了 None.text 而 None没有 text用法 Twilight6 发表于 2020-6-29 11:24
因为没爬取到你的 each标签里的 span 导致 返回的是 None也就是 each.span.text 变成了 None.text 而 N ...
可是为什么会爬取不到span 呢?那个targets是可以打印的啊 今天的我更强了 发表于 2020-6-29 12:08
可是为什么会爬取不到span 呢?那个targets是可以打印的啊
不是所有标签都含有这个节点,你遍历到其中一个不含有就会报错 Twilight6 发表于 2020-6-29 12:39
不是所有标签都含有这个节点,你遍历到其中一个不含有就会报错
所以说在写的时候多写几个父亲标签就是为了防止这种情况嘛? 今天的我更强了 发表于 2020-6-29 14:28
所以说在写的时候多写几个父亲标签就是为了防止这种情况嘛?
不一定, 常常多写反而会更容易照成这种错误,因为越多节点导致有些地方没有的概率越大
解决方法要么就放 if 判断,跳过是 None要么就观察好节点信息,填入肯定能找到这些元素的节点信息 Twilight6 发表于 2020-6-29 14:31
不一定, 常常多写反而会更容易照成这种错误,因为越多节点导致有些地方没有的概率越大
解决方法要么 ...
好的 谢谢
页:
[1]