小清高class 2021-09-19 15:55 采纳率: 100%
浏览 68
已结题

爬虫代码没有改变每次爬取的数据不同?


import pymongo
import requests
from lxml import etree
import time
import re

headers = {

    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52'
}

client = pymongo.MongoClient('localhost', 27017)  # 连接数据库
mydb = client['mydb']  # 创建库mydb
musictop = mydb['musictop250']  # 创建表
# 连接数据库

def get_url_music(url):
    """获取每个音乐的链接"""
    web_data = requests.get(url,headers=headers).content.decode()
    html = etree.HTML(web_data)
    selectors = html.xpath('//a[@class="nbg"]/@href')
    for selector in selectors:
        get_info(selector)

def get_info(url):
    """获取网页信息"""
    web_data = requests.get(url,headers=headers).content.decode()
    html = etree.HTML(web_data)
    songs = html.xpath('//*[@id="wrapper"]/h1/span/text()')[0]
    singers = re.findall(' 表演者:.*?<a href=".*?">(.*?)</a>',web_data,re.S)
    styles = re.findall('<span class="pl">流派:</span>&nbsp;(.*?)<br />',web_data,re.S)
    publish_time = re.findall(' <span class="pl">发行时间:</span>&nbsp;(.*?)<br />',web_data,re.S)
    rates = html.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()'[0])
    if len(styles)==0:
        styles='未知'
    else:
        styles=styles[0].strip()
    if len(publish_time)==0:
            publish_time='未知'
    else:
        publish_time=publish_time[0].strip()
    if len(singers)==0:
        singers='未知'
    else:
        singers=singers[0].strip()
    print(songs,singers,publish_time,rates)
    data = {
        'song':songs,
        'singer':singers,
        'style':styles,
        'publish_time':publish_time,
        'rate':rates
        }
    musictop.insert_one(data)


if __name__ == '__main__':
    urls = ['https://music.douban.com/top250?start={}'.format(str(i)) for i in range(0, 250, 25)]
    for url in urls:
        get_url_music(url)
        time.sleep(2)

疑惑的问题

  1. 每次运行的结果不一样
  2. 有时候出现错误有时候没有错误
  3. 有时候数据打印的时候都没打印完全就结束进程了

我都感觉是不是我电脑出问题了,希望大家能够帮我解决,谢谢

  • 写回答

1条回答 默认 最新

  • 阿虎呀 2021-09-19 23:42
    关注

    你应该发一发有什么错误,最佳250音乐,这本来就是可能变得,同时网络不好的时候,睡眠2秒是不够的,加上异常处理部分

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 修改了问题 9月19日
  • 创建了问题 9月19日

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊