937135952 发表于 2021-8-28 10:17:27

爬虫爬取网页结构不规律的情况

当网页结构是这样子的<tr class="tr_2">
<td><div>...2020-2-5</div></td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td><div>...2020-2-4</div></td>
<td>...</td>
<td>...</td>
</tr>
<tr class="tr_2">
<td><div>...2020-2-3</div></td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td><div>...2020-2-2</div></td>
<td>...</td>
<td>...</td>
</tr>
怎么爬取内容不遗漏呢
我是这么写的      daily = html.xpath('//tr/td/div/text()')
      print(daily)   
但是只能爬取到<tr class="tr_2">内的内容,相当于爬取一个跳一个了,求助各位大佬

suchocolate 发表于 2021-8-28 19:58:32

代码发全

937135952 发表于 2021-8-29 09:00:49

suchocolate 发表于 2021-8-28 19:58
代码发全


def open_url(url):
    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',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'en-US,en;q=0.5',
    'Accept-Encoding':'gzip',
    'DNT':'1',
    'Connection':'close'
    }
   
    res =requests.get(url,headers=headers)
    return res

def find_data(res):
    daily_list = []
   
    all_page = int(53)
    page=int(1)
    while page <all_page :
      
      res.encoding = 'gbk'
      html = etree.HTML(res.text)
      daily = html.xpath('//tr/td/div/text()')
      print(daily)   


def main():
    url = "https://vip.stock.finance.sina.com.cn/q/view/vFutures_History.php?jys=dce&pz=JM&hy=JM0&breed=JM0&type=inner&start=2016-01-1&end=2021-08-26"
    res = open_url(url)
    daily_list= find_data(res)

if __name__ =='__main__':
    main()            

      

阿奇_o 发表于 2021-8-29 14:49:39

937135952 发表于 2021-8-29 09:00

def open_url(url):
    headers = {


地址固定,又是简单的表格数据,你直接右键copy一两个表格的单元格的 Xpath 就发现规律了。。
比如:
2021-08-26 对应:/html/body/div/div/div/div/table/tbody/tr/td/div
2536.500    对应:/html/body/div/div/div/div/table/tbody/tr/td/div

看出来了吧。。

自己琢磨吧,这还是比较简单的.

937135952 发表于 2021-8-29 16:38:19

阿奇_o 发表于 2021-8-29 14:49
地址固定,又是简单的表格数据,你直接右键copy一两个表格的单元格的 Xpath 就发现规律了。。
比如:
2 ...

你说的这个我会啊,你没看清楚我的问题,我的问题是怎么把class="tr_2"的tr和没有class的tr加在一起

阿奇_o 发表于 2021-8-29 19:34:55

937135952 发表于 2021-8-29 16:38
你说的这个我会啊,你没看清楚我的问题,我的问题是怎么把class="tr_2"的tr和没有class的tr加在一起

标签tr 的class属性 可不止"tr_2",还有 "tdr",若要写应该是 '//tr*[@class="tr_2" or @class="tdr"]'
还有没带的,我是不知道怎么写了,哈哈,反正不能一步到位。

所以我试了好几种xpath(本来不熟,算做练习), 直接找出全部的 tr节点(这种最直接),
它的xpath就是 '//tr',找到的就包括全部的数据,但也包括空的列表。

然后再遍历它里面的元素,for row in trElems:r=row.xpath('./td/div') 这就确定到每行数据元素了。
但注意表头的六个是[],所以要判断一下过滤,只取表格部分的每行数据,即 r.text

这样说,应该明白了了吧{:10_312:}

937135952 发表于 2021-8-29 22:38:01

阿奇_o 发表于 2021-8-29 19:34
标签tr 的class属性 可不止"tr_2",还有 "tdr",若要写应该是 '//tr*[@class="tr_2" or @class="tdr"]' ...

可以,我明天试试。
我也想知道没带class的光秃秃的<tr>要怎么写,哈哈

937135952 发表于 2021-8-29 22:52:29

阿奇_o 发表于 2021-8-29 19:34
标签tr 的class属性 可不止"tr_2",还有 "tdr",若要写应该是 '//tr*[@class="tr_2" or @class="tdr"]' ...

会了,只要不带,就能匹配到所有的<tr>了

阿奇_o 发表于 2021-8-29 23:28:14

937135952 发表于 2021-8-29 22:52
会了,只要不带,就能匹配到所有的了

最常用的就是 //tr这样的呀,匹配所有叫 tr 的标签(节点)。

方括号[...]是起到 进一步过滤的作用……

页: [1]
查看完整版本: 爬虫爬取网页结构不规律的情况