鱼C论坛

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

[已解决]pyquery爬虫解析

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

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

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

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

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

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

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


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

    return details_url

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


#解析详情页
def parse_detail(html):
    
    doc = pq(html)
    br = doc('#Zoom span br').text()
    return br





def main():
    for page in range(1,2):
        index_html = scrape_index(page)
        hrefs = detail_url(index_html)
        # logging.info('detail_url:{}'.format(list(href)))
        for href in hrefs:
            detail_html = scrpae_detail(href)
            br = parse_detail(detail_html)
            logging.info('{}'.format(br))


if __name__ == '__main__':
    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
想知道小甲鱼最近在做啥?请访问 -> 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是您设定的总页数。

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

使用道具 举报

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

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

解决了。感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 13:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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