桃杏� 2023-03-10 15:16 采纳率: 100%
浏览 42
已结题

python爬虫没有结果返回

使用Python爬虫,代码没有问题,我是用的pycharm,朋友用的Vscode,她可以运行但是我运行不了,结果返回是空的,也不报错,以下是代码

import requests
import re
import pandas as pd
from lxml import etree
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt

url = 'https://www.jjwxc.net/topten.php?orderstr=7&t=0'
headers = {
    'cookie': '__yjs_duid=1_695ffee74a69dc5584c310ec8801cdd11673344566448; testcookie=yes; '
              'Hm_lvt_bc3b748c21fe5cf393d26c12b2c38d99=1673344567; timeOffset_o=-1159.10009765625; '
              'smidV2=202301101756406f750a4c79547b98806fb79f3c774d7a00acd69b212a2e0b0; '
              'JJEVER={"fenzhan":"yq","isKindle":"","background":"","font_size":""}; '
              'JJSESS={"referer":"/book2/7322952"}; '
              'Hm_lpvt_bc3b748c21fe5cf393d26c12b2c38d99=1673358311',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
text = response.content.decode('gbk')  # 获取网页源码,以文本形式显示
soup = BeautifulSoup(text, 'lxml')


def get_data_all(td):
    # 排名
    pm = td[0].text
    # 作者名
    zz = td[1].text.replace('\xa0', '').replace('\n', '')
    # 书名
    sm = td[2].text.replace('\n', '').replace('\xa0', '')
    # 类型
    lx = td[3].text.replace('\n', '').replace('\xa0', '').replace('\r', '').replace(' ', '')
    # 风格
    fg = td[4].text
    # 字数
    zs = td[6].text.replace('\n', '').replace('\xa0', '')
    # 积分
    jf = td[7].text.replace('\n', '').replace('\xa0', '').replace('\r', '')
    # 发布时间
    fbsj = td[8].text
    return [pm, zz, sm, lx, fg, zs, jf, fbsj]


def get_data(url):
    headers = {
        'cookie': '__yjs_duid=1_695ffee74a69dc5584c310ec8801cdd11673344566448; testcookie=yes; '
                  'Hm_lvt_bc3b748c21fe5cf393d26c12b2c38d99=1673344567; timeOffset_o=-1159.10009765625; '
                  'smidV2=202301101756406f750a4c79547b98806fb79f3c774d7a00acd69b212a2e0b0; '
                  'JJEVER={"fenzhan":"yq","isKindle":"","background":"","font_size":""}; '
                  'JJSESS={"referer":"/book2/7322952"}; Hm_lpvt_bc3b748c21fe5cf393d26c12b2c38d99=1673358311',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    text = response.content.decode('gbk')  # 获取网页源码,以文本形式显
    # 构造bs对象
    soup = BeautifulSoup(text, 'lxml')
    # 查找详细信息所在的tr节点
    tr = soup.find_all('tr', attrs={'bgcolor': '#eefaee'})
    list_all = []
    # 循环查找到的tr节点,并把获取到的信息依次存进空列表list_all
    for i in range(len(tr)):
        td = tr[i].find_all('td')
        add = get_data_all(td)  # 获取信息信息
        list_all.append(add)  # 存进列表
    # 存进小表格
    df = pd.DataFrame(list_all, columns=['排名', '作者名', '书名', '类型', '风格', '字数', '积分', '发布时间'])
    return df


df_all = get_data(url=url)
# 导出数据
df_all.to_csv(r'data.csv', index=False, encoding='utf_8_sig')


有人提议这可能是库的版本问题,附图

img


请问如何解决呢

  • 写回答

4条回答 默认 最新

  • 7*24 工作者 2023-03-10 16:07
    关注
    
    import requests
    from lxml import etree
    import pandas as pd
    
    url = 'https://www.jjwxc.net/topten.php?orderstr=7&t=0'
    
    def get_data(url):
        headers = {
            'cookie': '__yjs_duid=1_695ffee74a69dc5584c310ec8801cdd11673344566448; testcookie=yes; '
                      'Hm_lvt_bc3b748c21fe5cf393d26c12b2c38d99=1673344567; timeOffset_o=-1159.10009765625; '
                      'smidV2=202301101756406f750a4c79547b98806fb79f3c774d7a00acd69b212a2e0b0; '
                      'JJEVER={"fenzhan":"yq","isKindle":"","background":"","font_size":""}; '
                      'JJSESS={"referer":"/book2/7322952"}; Hm_lpvt_bc3b748c21fe5cf393d26c12b2c38d99=1673358311',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
        }
        response = requests.get(url=url, headers=headers)
        text = response.content.decode('gbk')  # 获取网页源码,以文本形式显
        # 构造bs对象
        html = etree.HTML(text)
        trs = html.xpath('//table[3]/tbody/tr')
    
        list_all = []
        # # 循环查找到的tr节点,并把获取到的信息依次存进空列表list_all
        for tr in trs[1:]:
            td_content = tr.xpath('./td//text()')
            item = []
            if len(td_content) == 15:
                item.append( td_content[0].strip() )   #排名
                item.append( td_content[2].strip() )   #作者名
                item.append( td_content[5].strip() )   #书名
                item.append( td_content[7].strip() )   #类型
                item.append( td_content[8].strip() )   #风格
                item.append( td_content[12].strip() )   #字数
                item.append( td_content[13].strip() )   #积分
                item.append( td_content[14].strip() )   #发布时间
                list_all.append(item)
            elif len(td_content) == 13:
                item.append( td_content[0].strip() )   #排名
                item.append( td_content[2].strip() )   #作者名
                item.append( td_content[5].strip() )   #书名
                item.append( td_content[7].strip() )   #类型
                item.append( td_content[8].strip() )   #风格
                item.append( td_content[10].strip() )   #字数
                item.append( td_content[11].strip() )   #积分
                item.append( td_content[12].strip() )   #发布时间
                list_all.append(item)
    
        # 存进小表格
        df = pd.DataFrame(list_all, columns=['排名', '作者名', '书名', '类型', '风格', '字数', '积分', '发布时间'])
        return df
    
    
    df_all = get_data(url=url)
    # 导出数据
    df_all.to_csv(r'data.csv', index=False, encoding='utf_8_sig')
    
    

    执行后的输出效果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器