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

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

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

买了本书从零开始初步摸门,虽然已经把书看了一轮了,现在才开始了动手的, 书后面是有提到 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]'))
----------------------- 以下是精选回复-----------------------

答:pd.read_html(page_req)[0]
答:删去 tbody 试试
答:浏览器会自动加 tbody
但是有些没 tbody 的,lxml 也取不到数据,我很郁闷,也不知道为啥,反正不是正经事儿,就算了
答:1.你应该 copy selector,而不是 xpath
2.这样 print 只会得到一个 object 吧?后面要加 content 或者 text()什么的
我也没怎么用 bs,你再查查 bs 手册

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

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 新手请教 BeautifulSoup 为什么爬不到目标数据?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情