鱼C论坛

 找回密码
 立即注册
查看: 2277|回复: 2

[已解决]pyquery爬虫解析

[复制链接]
发表于 2023-7-5 17:59:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问大佬们,我这个代码怎么解析不到详情页的数据呢
  1. import requests
  2. import logging
  3. from urllib.parse import urljoin
  4. from pyquery import PyQuery as pq

  5. index_url = 'https://www.ygdy8.net/html/gndy/china/list_4_{}.html'
  6. header = {
  7.    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
  8. }
  9. PAGE = 3
  10. logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s: %(message)s')

  11. #发起请求
  12. def scrape_page(url):
  13.     logging.info('正在爬取:{}...'.format(url))
  14.     try:
  15.         response = requests.get(url=url,headers=header)
  16.         if response.status_code == 200:
  17.             return response.text
  18.         logging.error('出现错误,爬取代码:{}'.format(response.status_code))
  19.     except requests.RequestException:
  20.         logging.error('爬取{}出现错误'.format(url))

  21. #拼接url并发起请求
  22. def scrape_index(page):
  23.     url = index_url.format(page)
  24.     return scrape_page(url)


  25. #解析详情页url
  26. def detail_url(index_html):
  27.     details_url = []
  28.     doc = pq(index_html)
  29.     hrefs = doc('td b a:nth-child(2)').items()
  30.     for href in hrefs:
  31.         urls = href.attr('href')
  32.         url = urljoin(index_url, urls)
  33.         details_url.append(url)

  34.     return details_url

  35. #详情页发起请求
  36. def scrpae_detail(url):
  37.     return scrape_page(url)


  38. #解析详情页
  39. def parse_detail(html):
  40.    
  41.     doc = pq(html)
  42.     br = doc('#Zoom span br').text()
  43.     return br





  44. def main():
  45.     for page in range(1,2):
  46.         index_html = scrape_index(page)
  47.         hrefs = detail_url(index_html)
  48.         # logging.info('detail_url:{}'.format(list(href)))
  49.         for href in hrefs:
  50.             detail_html = scrpae_detail(href)
  51.             br = parse_detail(detail_html)
  52.             logging.info('{}'.format(br))


  53. if __name__ == '__main__':
  54.     main()
复制代码

最佳答案
2023-7-5 17:59:57
您的代码中有几个问题可能导致无法解析到详情页的数据:

1. 主要问题在于解析详情页URL的部分。在您的代码中,使用了urljoin函数来拼接URL,但需要注意的是,urljoin的第一个参数应该是基础URL,第二个参数是相对URL。而在您的代码中,index_url被当作基础URL,但它是一个格式化字符串,并不能完整表示基础URL。我建议您将 index_url 改为 'https://www.ygdy8.net/html/gndy/china/',然后再使用urljoin函数进行拼接。

2. 另外,您在解析详情页URL时使用了td b a:nth-child(2)作为选择器,但这并不是唯一的选择器,具体情况要看网页结构。建议您检查一下网页的HTML结构,确保选择器是正确的。

3. 您的主函数中使用了range(1,2),这会导致只爬取第一页的数据。如果您想要爬取多个页面的数据,可以修改为range(1, PAGE+1),其中PAGE是您设定的总页数。

请尝试修改以上问题,看看是否能够解决无法解析到详情页数据的问题。如果还有其他问题,请提供详细的错误信息以便更好地帮助您解决。
屏幕截图(55).png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-5 17:59:57 | 显示全部楼层    本楼为最佳答案   
您的代码中有几个问题可能导致无法解析到详情页的数据:

1. 主要问题在于解析详情页URL的部分。在您的代码中,使用了urljoin函数来拼接URL,但需要注意的是,urljoin的第一个参数应该是基础URL,第二个参数是相对URL。而在您的代码中,index_url被当作基础URL,但它是一个格式化字符串,并不能完整表示基础URL。我建议您将 index_url 改为 'https://www.ygdy8.net/html/gndy/china/',然后再使用urljoin函数进行拼接。

2. 另外,您在解析详情页URL时使用了td b a:nth-child(2)作为选择器,但这并不是唯一的选择器,具体情况要看网页结构。建议您检查一下网页的HTML结构,确保选择器是正确的。

3. 您的主函数中使用了range(1,2),这会导致只爬取第一页的数据。如果您想要爬取多个页面的数据,可以修改为range(1, PAGE+1),其中PAGE是您设定的总页数。

请尝试修改以上问题,看看是否能够解决无法解析到详情页数据的问题。如果还有其他问题,请提供详细的错误信息以便更好地帮助您解决。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 18:53:50 | 显示全部楼层
陶远航 发表于 2023-7-5 17:59
您的代码中有几个问题可能导致无法解析到详情页的数据:

1. 主要问题在于解析详情页URL的部分。在您的代码 ...

解决了。感谢感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表