新手请教 BeautifulSoup 为什么爬不到目标数据?

2018-08-11 22:16:07 +08:00
 pppguest3962

买了本书从零开始初步摸门,虽然已经把书看了一轮了,现在才开始了动手的, 书后面是有提到 xml,lxml 的各种方式(也许高手们都倾向这些方式), 但我还是打算先搞通 html.parser 这个初步方式,获取小目标的成功。。。

随便在网上找了个表格网页,获取其中一个产品的规格。。。

用的是 firefox 56.0,自带开发者工具。 右键目标元素,在 firefox 查看器里右键,复制,Xpath,

得到的是: /html/body/table[2]/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/table/tbody/tr[1]/td[2]/table[2]/tbody/tr[11]/td[3]

我看书上写的目标元素路径是用 > 表示的(书上提到他的浏览器是 chrome )

尝试用两种表示方式,都 print 不出目标

是 soup.select()路径的问题?

#coding=UTF-8
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
url = 'http://www.chinatimber.org/bj/'

page_req = requests.get(url,headers=headers)
soup = BeautifulSoup(page_req.text,'html.parser')


print(soup.select('html > body > table[2] > tbody > tr[2] > td[2] > table > tbody > tr[3] > td > table > tbody > tr[1] > td[2] > table[2] > tbody > tr[1] > td[3]'))
print(soup.select('/html/body/table[2]/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/table/tbody/tr[1]/td[2]/table[2]/tbody/tr[1]/td[3]'))
2820 次点击
所在节点    Python
9 条回复
regicide
2018-08-11 22:28:35 +08:00
pd.read_html(page_req)[0]
xupeng970623
2018-08-11 22:41:03 +08:00
删去 tbody 试试
VVVVVEX
2018-08-11 22:59:19 +08:00
浏览器会自动加 tbody
但是有些没 tbody 的,lxml 也取不到数据,我很郁闷,也不知道为啥,反正不是正经事儿,就算了
imn1
2018-08-11 23:18:21 +08:00
1.你应该 copy selector,而不是 xpath
2.这样 print 只会得到一个 object 吧?后面要加 content 或者 text()什么的
我也没怎么用 bs,你再查查 bs 手册

我觉得你还是要学一学 css selector 或者 xpath 语法,这个应该先行
速成可以搜搜 css xpath cheatsheet
jimmyczm
2018-08-11 23:21:51 +08:00
有些 id 或 class 是整个页面唯一的,那么你直接 select 这个标志会快一点
lanpong
2018-08-11 23:34:58 +08:00
虽然右键获取是一个捷径,但是有时候会选择的不出来。
还是认真学一下 css 选择器。不过 BeautifulSoup 里面的 find()和 find_all()更加好理解。
epicnoob
2018-08-12 00:26:28 +08:00
不要用 html parse,我碰到过问题,换成 html5lib 就好了
Sylv
2018-08-12 03:29:51 +08:00
BeautifulSoup 不支持 xpath,soup.select 得用 css selector。
shakespaces
2018-08-12 10:29:27 +08:00
我都无差别 lxml 的。。。有啥区别吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/478953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX