买了本书从零开始初步摸门,虽然已经把书看了一轮了,现在才开始了动手的, 书后面是有提到 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]'))
1
regicide 2018-08-11 22:28:35 +08:00 via iPhone
pd.read_html(page_req)[0]
|
2
xupeng970623 2018-08-11 22:41:03 +08:00 via Android
删去 tbody 试试
|
3
VVVVVEX 2018-08-11 22:59:19 +08:00
浏览器会自动加 tbody
但是有些没 tbody 的,lxml 也取不到数据,我很郁闷,也不知道为啥,反正不是正经事儿,就算了 |
4
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 |
5
jimmyczm 2018-08-11 23:21:51 +08:00
有些 id 或 class 是整个页面唯一的,那么你直接 select 这个标志会快一点
|
6
lanpong 2018-08-11 23:34:58 +08:00
虽然右键获取是一个捷径,但是有时候会选择的不出来。
还是认真学一下 css 选择器。不过 BeautifulSoup 里面的 find()和 find_all()更加好理解。 |
7
epicnoob 2018-08-12 00:26:28 +08:00
不要用 html parse,我碰到过问题,换成 html5lib 就好了
|
8
Sylv 2018-08-12 03:29:51 +08:00 via iPhone
BeautifulSoup 不支持 xpath,soup.select 得用 css selector。
|
9
shakespaces 2018-08-12 10:29:27 +08:00 via Android
我都无差别 lxml 的。。。有啥区别吗
|