会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132647个问题
Python 全系列/第十六阶段:Python 爬虫开发/scrapy框架使用 692楼

老师,我爬取豆瓣电影代码如下:

from urllib.request import Request
from urllib.request import urlopen
from random import choice
from time import sleep


def get_html(url):
    user_agnet_list = [
        # 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\
        #  Chrome/80.0.3987.132 Safari/537.36'
        # 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)123456',
        # 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
        # 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)',
        # 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)',
        # 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; \
        # .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)',
        # 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
        # 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50(KHTML, like Gecko)\
        #  Version/5.1 Safari/534.50'
        'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    ]
    choice_agent = choice(user_agnet_list)
    headers = {
        'User-Agent': choice_agent
    }
    request = Request(url, headers=headers)
    response = urlopen(request)
    return response.read().decode()


def save_html(html, filename):
    with open(filename, 'a', encoding='utf-8') as f:
        f.writelines(html)


def main():
    i = 0
    base_url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={}&limit=20'
    while True:
        url = base_url.format(i * 20)
        html = get_html(url)
        if html == '[]':  # 返回值为[]时表示遍历完成,退出循环
            break
        else:
            print(html)
            save_html(html, 'a.html')
            i += 1
            sleep(3)
    # html=get_html(base_url)
    # print(html)


if __name__ == '__main__':
    main()

刚开始运行还能运行,后面运行提示:

image.png是不是被封ip了?如何解决?


Python 全系列/第十六阶段:Python 爬虫开发/爬虫基础(旧) 694楼
Python 全系列/第十六阶段:Python 爬虫开发/动态数据抓取 695楼
Python 全系列/第十六阶段:Python 爬虫开发/爬虫基础 696楼
Python 全系列/第十六阶段:Python 爬虫开发/移动端爬虫 697楼

image.png

Python 全系列/第十六阶段:Python 爬虫开发/爬虫反反爬 698楼

老师,这是结果报的是NoneType: None,应该怎么办啊


2024-05-21 12:35:46 [scrapy.utils.log] INFO: Scrapy 2.11.2 started (bot: scrapy05)

2024-05-21 12:35:46 [scrapy.utils.log] INFO: Versions: lxml 5.2.2.0, libxml2 2.11.7, cssselect 1.2.0, parsel 1.9.1, w3lib 2.1.2, Twisted 24.3.0, Python 3.11.3 (tags/v3.11.3:f3909b8, Apr  4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)], pyOpenSSL 24.1.0 (OpenSSL 3.2.1 30 Jan 2024), cryptography 42.0.7, Platform Windows-10-10.0.22621-SP0

2024-05-21 12:35:46 [scrapy.addons] INFO: Enabled addons:

[]

2024-05-21 12:35:46 [asyncio] DEBUG: Using selector: SelectSelector

2024-05-21 12:35:46 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor

2024-05-21 12:35:46 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.windows_events._WindowsSelectorEventLoop

2024-05-21 12:35:46 [scrapy.extensions.telnet] INFO: Telnet Password: 9681eb48711cc975

2024-05-21 12:35:46 [scrapy.middleware] INFO: Enabled extensions:

['scrapy.extensions.corestats.CoreStats',

 'scrapy.extensions.telnet.TelnetConsole',

 'scrapy.extensions.logstats.LogStats']

2024-05-21 12:35:46 [scrapy.crawler] INFO: Overridden settings:

{'BOT_NAME': 'scrapy05',

 'FEED_EXPORT_ENCODING': 'utf-8',

 'NEWSPIDER_MODULE': 'scrapy05.spiders',

 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7',

 'SPIDER_MODULES': ['scrapy05.spiders'],

 'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor',

 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '

               '(KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'}

2024-05-21 12:35:46 [scrapy.middleware] INFO: Enabled downloader middlewares:

['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware',

 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',

 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',

 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',

 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',

 'scrapy.downloadermiddlewares.retry.RetryMiddleware',

 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',

 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',

 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',

 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',

 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',

 'scrapy.downloadermiddlewares.stats.DownloaderStats']

2024-05-21 12:35:46 [scrapy.middleware] INFO: Enabled spider middlewares:

['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',

 'scrapy.spidermiddlewares.referer.RefererMiddleware',

 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',

 'scrapy.spidermiddlewares.depth.DepthMiddleware']

2024-05-21 12:35:46 [scrapy.middleware] INFO: Enabled item pipelines:

['scrapy.pipelines.images.ImagesPipeline']

2024-05-21 12:35:46 [scrapy.core.engine] INFO: Spider opened

2024-05-21 12:35:46 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

2024-05-21 12:35:46 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023

2024-05-21 12:35:46 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://desk.zol.com.cn/bizhi/9812_118227_2.html> (referer: None)

2024-05-21 12:35:46 [scrapy.downloadermiddlewares.offsite] DEBUG: Filtered offsite request to 'desk-fd.zol-img.com.cn': <GET https://desk-fd.zol-img.com.cn/t_s960x600c5/g6/M00/0F/09/ChMkKWF4tn6IeIGwAD5r3l1JSDcAAU-5QFAFu4APmv2924.jpg>

2024-05-21 12:35:46 [scrapy.pipelines.media] ERROR: [Failure instance: Traceback: <class 'scrapy.pipelines.files.FileException'>:

D:\python_env\spider3_env\Lib\site-packages\twisted\internet\defer.py:536:addCallbacks      

D:\python_env\spider3_env\Lib\site-packages\twisted\internet\defer.py:1078:_runCallbacks    

D:\python_env\spider3_env\Lib\site-packages\scrapy\pipelines\media.py:197:_check_media_to_download

D:\python_env\spider3_env\Lib\site-packages\twisted\internet\defer.py:536:addCallbacks      

--- <exception caught here> ---

D:\python_env\spider3_env\Lib\site-packages\twisted\internet\defer.py:1078:_runCallbacks    

D:\python_env\spider3_env\Lib\site-packages\scrapy\pipelines\files.py:459:media_failed      

]

NoneType: None

2024-05-21 12:35:46 [scrapy.core.scraper] DEBUG: Scraped from <200 https://desk.zol.com.cn/bizhi/9812_118227_2.html>

{'image_urls': ['https://desk-fd.zol-img.com.cn/t_s960x600c5/g6/M00/0F/09/ChMkKWF4tn6IeIGwAD5r3l1JSDcAAU-5QFAFu4APmv2924.jpg'], 'images': []}

2024-05-21 12:35:46 [scrapy.core.engine] INFO: Closing spider (finished)

2024-05-21 12:35:46 [scrapy.statscollectors] INFO: Dumping Scrapy stats:

{'downloader/exception_count': 1,

 'downloader/exception_type_count/scrapy.exceptions.IgnoreRequest': 1,

 'downloader/request_bytes': 316,

 'downloader/request_count': 1,

 'downloader/request_method_count/GET': 1,

 'downloader/response_bytes': 9739,

 'downloader/response_count': 1,

 'downloader/response_status_count/200': 1,

 'elapsed_time_seconds': 0.367081,

 'finish_reason': 'finished',

 'finish_time': datetime.datetime(2024, 5, 21, 4, 35, 46, 984841, tzinfo=datetime.timezone.utc),

 'httpcompression/response_bytes': 33794,

 'httpcompression/response_count': 1,

 'item_scraped_count': 1,

 'log_count/DEBUG': 6,

 'log_count/ERROR': 1,

 'log_count/INFO': 10,

 'offsite/domains': 1,

 'offsite/filtered': 1,

 'response_received_count': 1,

 'scheduler/dequeued': 1,

 'scheduler/dequeued/memory': 1,

 'scheduler/enqueued': 1,

 'scheduler/enqueued/memory': 1,

 'start_time': datetime.datetime(2024, 5, 21, 4, 35, 46, 617760, tzinfo=datetime.timezone.utc)}

2024-05-21 12:35:46 [scrapy.core.engine] INFO: Spider closed (finished)

Python 全系列/第十六阶段:Python 爬虫开发/scrapy框架使用 699楼

from fake_useragent import UserAgent
import requests
from lxml import etree
from time import sleep

def get_html(url):
    #传递要爬取的地址
    #返回html
    headers= {"User-Agent":UserAgent().chrome}
    resp = requests.get(url,headers=headers)
    sleep(2)
    if resp.status_code == 200:
        return resp.text
    else:
        return None

def parse_list(html):
    #传递进来一个有电影列表的html
    #返回一个电影列表的url
    e = etree.HTML(html)
    list_url = ['https://maoyan.com/{}'.format(url) for url in e.xpath('//div[@class="movie-item-hover"]/a/@href')]
    return list_url

def pares_index(html):
    #传递进来一个有电影信息的html
    #返回已提取好的电影信息
    e = etree.HTML(html)
    name = e.xpath('//h1[@class="name"]/text()')
    type = e.xpath('//li[@class="ellipsis"]/a[1]/text()')
    actors = e.xpath('//li[@class="celebrity actor"]/div[@class="info"]/a/text()')
    actors = format_data(actors)
    return {"name":name,"type":type,"actors":actors}

#去重
def format_data(actors):
    actor_set = set()
    for actor in actors:
        actor_set.add(actor.strip())
    return actor_set

def main():
    num = int(input("请输入要获取多少页:"))
    for page in range(num):
        url = 'https://maoyan.com/films?showType=3&offset={}'.format(page*30)
        list_html = get_html(url)
        list_url = parse_list(list_html)
        for url in list_url:
            info_html = get_html(url)
            movie = pares_index(info_html)
            print(movie)

if __name__ == '__main__':
    main()

image.png

老师,我运行后出现如上报错,然后我尝试修改了一下代码如下。

image.png

但是执行后出来的效果如下图,求帮助。

image.png

Python 全系列/第十六阶段:Python 爬虫开发/爬虫反反爬- 701楼
Python 全系列/第十六阶段:Python 爬虫开发/docker 容器扩展(旧) 702楼
Python 全系列/第十六阶段:Python 爬虫开发/爬虫反反爬 703楼
Python 全系列/第十六阶段:Python 爬虫开发/移动端爬虫开发- 704楼
Python 全系列/第十六阶段:Python 爬虫开发/爬虫基础(旧) 705楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637