以下圖片是我寫的測驗:不知道為什么下面一個xapth取不到內容回傳的是一個空的串列
但是xpath是正確的啊,
這是全代碼,希望大佬指正
import requests
import csv
from bs4 import BeautifulSoup
from lxml import etree
url='http://www.cqjlpggzyzhjy.gov.cn/cqjl/jyxx/003001/003001002/MoreInfo.aspx?CategoryNum=003001002'
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
def main():
for i in range(1,71):
#post請求修改表單資料 只需要寫要修改的部分,不需要把表單里的全部內容都寫進去
playload={'__EVENTARGUMENT':i}
r = requests.post(url, headers=header, data=https://bbs.csdn.net/topics/playload,timeout=30)
r.encoding='utf-8' #或者 r.content.decode('utf-8') html=etree.HTML(r)
html=etree.HTML(r.text)
#xpath提取tbody內的所有的tr標簽,尾部沒有text()
trs=html.xpath('//*[@id="MoreInfoList1_DataGrid1"]//tr')
titles=[]
messages=[]
headers=['名稱','時間']
keylists=[]
valuelists=[]
#獲取公告名稱 和日期 ,有text()表示提取標簽內的文字,而且xpath回傳的就是串列
for tr in trs:
#取所有的標題名字的第一個
name=tr.xpath('.//td[2]//a//text()')[0]
#取所有日期中第一個
time=((tr.xpath('./td[3]//text()')[0]).replace('\n','')).replace('\r','')
#拼接url,并取所有url中的第一個
urls="http://www.cqjlpggzyzhjy.gov.cn" + tr.xpath(".//td[2]//a/@href/text()")[0]
r2=requests.get(urls,headers=header)
r2.encoding='utf-8'
html2=etree.HTML(r2.text)
data=https://bbs.csdn.net/topics/{'中標公告':name,
'時間':time
}
with open('九龍坡公告標題','w',encoding='utf-8',newline='') as fp:
writer=csv.DictWriter(fp,headers)
writer.writeheader()
writer.writerows(titles)
#表中的每個元素
keylist=html2.xpath("//body//table[@class]/tbody/tr/td[1]//p//text()")
for i in range(6):
keylists.append(keylist[i])
#表中每個元素對應的值
valuelist=html2.xpath("//body//table[@class]/tbody/tr/td[2]//p//text()")
for i in range(6):
valuelists.append(valuelist[i])
for i in range(6):
key=keylists[i]
value=https://bbs.csdn.net/topics/valuelists[i]
messages[0][key]=value[0]
with open('任務2九龍坡公告內容','w',encoding='utf-8',newline='') as f:
writer=csv.DictWriter(f,headers)
writer.writeheader()
writer.writerows(messages)
main()
uj5u.com熱心網友回復:
愁了好久了 純粹自學沒人指點啊
uj5u.com熱心網友回復:
經過etree處理過的網頁結構標簽會變么?xpath跟原來瀏覽器上匹配的xpath不一樣了
uj5u.com熱心網友回復:
參考 樓主 chuan er的回復: 以下圖片是我寫的測驗:不知道為什么下面一個xapth取不到內容回傳的是一個空的串列
但是xpath是正確的啊,
這是全代碼,希望大佬指正
import requests
import csv
from bs4 import BeautifulSoup
from lxml import etree
url='http://www.cqjlpggzyzhjy.gov.cn/cqjl/jyxx/003001/003001002/MoreInfo.aspx?CategoryNum=003001002'
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
def main():
for i in range(1,71):
#post請求修改表單資料 只需要寫要修改的部分,不需要把表單里的全部內容都寫進去
playload={'__EVENTARGUMENT':i}
r = requests.post(url, headers=header, data=https://bbs.csdn.net/topics/playload,timeout=30)
r.encoding='utf-8' #或者 r.content.decode('utf-8') html=etree.HTML(r)
html=etree.HTML(r.text)
#xpath提取tbody內的所有的tr標簽,尾部沒有text()
trs=html.xpath('//*[@id="MoreInfoList1_DataGrid1"]//tr')
titles=[]
messages=[]
headers=['名稱','時間']
keylists=[]
valuelists=[]
#獲取公告名稱 和日期 ,有text()表示提取標簽內的文字,而且xpath回傳的就是串列
for tr in trs:
#取所有的標題名字的第一個
name=tr.xpath('.//td[2]//a//text()')[0]
#取所有日期中第一個
time=((tr.xpath('./td[3]//text()')[0]).replace('\n','')).replace('\r','')
#拼接url,并取所有url中的第一個
urls="http://www.cqjlpggzyzhjy.gov.cn" + tr.xpath(".//td[2]//a/@href/text()")[0]
r2=requests.get(urls,headers=header)
r2.encoding='utf-8'
html2=etree.HTML(r2.text)
data=https://bbs.csdn.net/topics/{'中標公告':name,
'時間':time
}
with open('九龍坡公告標題','w',encoding='utf-8',newline='') as fp:
writer=csv.DictWriter(fp,headers)
writer.writeheader()
writer.writerows(titles)
#表中的每個元素
keylist=html2.xpath("//body//table[@class]/tbody/tr/td[1]//p//text()")
for i in range(6):
keylists.append(keylist[i])
#表中每個元素對應的值
valuelist=html2.xpath("//body//table[@class]/tbody/tr/td[2]//p//text()")
for i in range(6):
valuelists.append(valuelist[i])
for i in range(6):
key=keylists[i]
value=https://bbs.csdn.net/topics/valuelists[i]
messages[0][key]=value[0]
with open('任務2九龍坡公告內容','w',encoding='utf-8',newline='') as f:
writer=csv.DictWriter(f,headers)
writer.writeheader()
writer.writerows(messages)
main()
博主你的問題解決了嗎?遇到了跟博主相同的問題
uj5u.com熱心網友回復:
我知道xpath不要再瀏覽器上直接復制,尤其xpath中出現tbody的你需要洗掉,瀏覽器會規范這個html檔案,因此xpath中會出現莫名其妙的一些路徑,標簽,這跟程式獲得的html資源不一樣。
uj5u.com熱心網友回復:
參考 3 樓 qq_44305513 的回復: Quote: 參考 樓主 chuan er的回復: 以下圖片是我寫的測驗:不知道為什么下面一個xapth取不到內容回傳的是一個空的串列
但是xpath是正確的啊,
這是全代碼,希望大佬指正
import requests
import csv
from bs4 import BeautifulSoup
from lxml import etree
url='http://www.cqjlpggzyzhjy.gov.cn/cqjl/jyxx/003001/003001002/MoreInfo.aspx?CategoryNum=003001002'
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
def main():
for i in range(1,71):
#post請求修改表單資料 只需要寫要修改的部分,不需要把表單里的全部內容都寫進去
playload={'__EVENTARGUMENT':i}
r = requests.post(url, headers=header, data=https://bbs.csdn.net/topics/playload,timeout=30)
r.encoding='utf-8' #或者 r.content.decode('utf-8') html=etree.HTML(r)
html=etree.HTML(r.text)
#xpath提取tbody內的所有的tr標簽,尾部沒有text()
trs=html.xpath('//*[@id="MoreInfoList1_DataGrid1"]//tr')
titles=[]
messages=[]
headers=['名稱','時間']
keylists=[]
valuelists=[]
#獲取公告名稱 和日期 ,有text()表示提取標簽內的文字,而且xpath回傳的就是串列
for tr in trs:
#取所有的標題名字的第一個
name=tr.xpath('.//td[2]//a//text()')[0]
#取所有日期中第一個
time=((tr.xpath('./td[3]//text()')[0]).replace('\n','')).replace('\r','')
#拼接url,并取所有url中的第一個
urls="http://www.cqjlpggzyzhjy.gov.cn" + tr.xpath(".//td[2]//a/@href/text()")[0]
r2=requests.get(urls,headers=header)
r2.encoding='utf-8'
html2=etree.HTML(r2.text)
data=https://bbs.csdn.net/topics/{'中標公告':name,
'時間':time
}
with open('九龍坡公告標題','w',encoding='utf-8',newline='') as fp:
writer=csv.DictWriter(fp,headers)
writer.writeheader()
writer.writerows(titles)
#表中的每個元素
keylist=html2.xpath("//body//table[@class]/tbody/tr/td[1]//p//text()")
for i in range(6):
keylists.append(keylist[i])
#表中每個元素對應的值
valuelist=html2.xpath("//body//table[@class]/tbody/tr/td[2]//p//text()")
for i in range(6):
valuelists.append(valuelist[i])
for i in range(6):
key=keylists[i]
value=https://bbs.csdn.net/topics/valuelists[i]
messages[0][key]=value[0]
with open('任務2九龍坡公告內容','w',encoding='utf-8',newline='') as f:
writer=csv.DictWriter(f,headers)
writer.writeheader()
writer.writerows(messages)
main()
博主你的問題解決了嗎?遇到了跟博主相同的問題不要直接復制xpath 自己寫
uj5u.com熱心網友回復:
我今天遇到差不多的問題,根據一個博主的提示,把“tbody”洗掉就運行成功了!
附上原博主網址 https://blog.csdn.net/qq_35425070/article/details/87697898
uj5u.com熱心網友回復:
我也有這樣的問題,和你的情況一樣
uj5u.com熱心網友回復:
參考 7 樓 jgdabc的回復: 我也有這樣的問題,和你的情況一樣
我知道xpath不要再瀏覽器上直接復制,尤其xpath中出現tbody的你需要洗掉,瀏覽器會規范這個html檔案,因此xpath中會出現莫名其妙的一些路徑,標簽,這跟程式獲得的html資源不一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/13213.html
標籤:其他
上一篇:筆記本電腦出現問題
下一篇:Matlab2018a 安裝啟動出現這個問題failed to initialize Java