请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

browser = uc.Chrome()出错

运行到browser = uc.Chrome()就出错了。

The “freeze_support()” line can be omitted if the program

main.py加了if name == ‘main’:后,又报另外一个错误

TypeError: argument of type ‘NoneType’ is not iterable

麻烦老师帮我看看

正在回答 回答被采纳积分+3

3回答

慕勒5311868 2022-01-25 11:43:05

老哥,我的解决了,参考了楼上qq_慕神6513837的,主要是,我把settings.py里的这个改过了

ROBOTSTXT_OBEY = False

因为如果是true的话,网页不希望你进行爬取收录,改为false以后,不遵守robots协议,网页就无法限制你的爬虫,就可以爬了。还有在main文件中添加 if __class__ == ''__main__",修改pycharm环境的默认浏览器是chroms,那个老兄的其他几个我没用上也解决了,其他的几个对我的参考意义不大。还是要谢谢qq_慕神6513837这位老兄,提供了好的思路。


1 回复 有任何疑惑可以回复我~
qq_慕神6513837 2022-01-16 09:57:06

我也是同样的问题,改了以下几个地方,调试通过了,可以试下:

  1. 修改settings文件的user-agent和robots

  2. 修改pycharm环境的默认浏览器是chroms

  3. 代码中指定chrome版本号uc.Chrome(version_main=96)(备注:我的chrome是96版本)

  4. main文件中添加 if __class__ == ''__main__"

1 回复 有任何疑惑可以回复我~
  • bobby #1
    赞一个
    回复 有任何疑惑可以回复我~ 2022-01-17 17:00:20
  • 你好,请问第四条指的是,在main文件中加入以下内容吗?
    if __name__ == '__main__':
        freeze_support()
    回复 有任何疑惑可以回复我~ 2022-02-08 01:46:34
  • 懂了懂了,原来是在前面加
    回复 有任何疑惑可以回复我~ 2022-02-08 16:35:10
Jynine 2022-02-10 10:33:16

根据qq_慕神6513837我修改了以下3个地方:
1.修改setting.py

将ROBOTSTXT_OBEY = True 修改为 ROBOTSTXT_OBEY = False

2.修改pycharm的默认浏览器为chrome,file->setting->Tools->Web Browsers and Preview, 只勾选了Chrome,然后 default browser 选择:first listed 。确认。

3.根据user-agent 修改uc.Chrome() 的版本号。

headers = {

                'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'

            }

因为我的header里面这个user-agent的chrome版本是97,所以我指定了uc.chrome的版本为97:driver = uc.Chrome(version_main=97)

4.修改main.py,修改后如下:

from multiprocessing import freeze_support

if __name__ == '__main__': #添加这段语句

    from scrapy.cmdline import execute

    import sys

    import os 

    sys.path.append(os.path.dirname(os.path.abspath(__file__)))

    execute(["scrapy","crawl","cnblogs"])


修改完以后,我就成功的打开浏览器了。希望对你有帮助!


cnblogs修改完后的代码如下:

 import scrapy
class CnblogsSpider(scrapy.Spider):
    name = 'cnblogs'
    allowed_domains = ['news.cnblogs.com']
    start_urls = ['http://news.cnblogs.com/']
    custom_settings = {
        "COOKIES_ENABLED": True
    }

    def start_requests(self):
        #入口可以模拟登录拿到cookie
        import undetected_chromedriver.v2 as uc
        driver = uc.Chrome(version_main=97)
        driver.get("https://account.cnblogs.com/signin")
        input("回车继续:")
        cookies = driver.get_cookies()
        cookie_dict = {}
        for cookie in cookies :
            cookie_dict[cookie['name']] = cookie['value']

        for url in self.start_urls:
            #将cookie交给scrapy
            headers = {
                'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
            }
            yield scrapy.Request(url,cookies=cookie_dict, headers=headers, dont_filter=True)

    def parse(self, response):
        url = response.xpath('//*[@id="entry_712436"]/div[2]/h2/a/@href').extract_first("未取到")
        url2 = response.xpath('//div[@id="news_list"]//h2[@class="news_entry"]/a/@href').extract()
        url3 = response.css('#news_list .news_entry a::attr(href)').extract()
        print(url)
        print(url2)
        print(url3)
        pass
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信