马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
您的代码中有几个问题可能导致无法解析到详情页的数据:
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是您设定的总页数。
请尝试修改以上问题,看看是否能够解决无法解析到详情页数据的问题。如果还有其他问题,请提供详细的错误信息以便更好地帮助您解决。
|