哈岁NB 发表于 2023-7-5 17:59:44

pyquery爬虫解析

请问大佬们,我这个代码怎么解析不到详情页的数据呢
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是您设定的总页数。

请尝试修改以上问题,看看是否能够解决无法解析到详情页数据的问题。如果还有其他问题,请提供详细的错误信息以便更好地帮助您解决。

哈岁NB 发表于 2023-7-5 18:53:50

陶远航 发表于 2023-7-5 17:59
您的代码中有几个问题可能导致无法解析到详情页的数据:

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

解决了。感谢感谢
页: [1]
查看完整版本: pyquery爬虫解析