GithubHelp home page GithubHelp logo

weibo-search's Introduction

功能

连续获取一个或多个微博关键词搜索结果,并将结果写入文件(可选)、数据库(可选)等。所谓微博关键词搜索即:搜索正文中包含指定关键词的微博,可以指定搜索的时间范围。
举个栗子,比如你可以搜索包含关键词“迪丽热巴”且发布日期在2020-03-01和2020-03-16之间的微博。搜索结果数量巨大,对于非常热门的关键词,在一天的指定时间范围,可以获得1000万以上的搜索结果。注意这里的一天指的是时间筛选范围,具体多长时间将这1000万微博下载到本地还要看获取的速度。1000万只是一天时间范围可获取的微博数量,如果想获取更多微博,可以加大时间范围,比如10天,最多可以获得1000万X10=1亿条搜索结果,当然你也可以再加大时间范围。对于大多数关键词,微博一天产生的相关搜索结果应该低于1000万,因此可以说本程序可以获取指定关键词的全部或近似全部的搜索结果。本程序可以获得几乎全部的微博信息,如微博正文、发布者等,详情见输出部分。支持输出多种文件类型,具体如下:

  • 写入csv文件(默认)
  • 写入MySQL数据库(可选)
  • 写入MongoDB数据库(可选)
  • 下载微博中的图片(可选)
  • 下载微博中的视频(可选)

输出

  • 微博id:微博的id,为一串数字形式
  • 微博bid:微博的bid
  • 微博内容:微博正文
  • 头条文章url:微博中头条文章的url,若某微博中不存在头条文章,则该值为''
  • 原始图片url:原创微博图片和转发微博转发理由中图片的url,若某条微博存在多张图片,则每个url以英文逗号分隔,若没有图片则值为''
  • 视频url: 微博中的视频url和Live Photo中的视频url,若某条微博存在多个视频,则每个url以英文分号分隔,若没有视频则值为''
  • 微博发布位置:位置微博中的发布位置
  • 微博发布时间:微博发布时的时间,精确到天
  • 点赞数:微博被赞的数量
  • 转发数:微博被转发的数量
  • 评论数:微博被评论的数量
  • 微博发布工具:微博的发布工具,如iPhone客户端、HUAWEI Mate 20 Pro等,若没有则值为''
  • 话题:微博话题,即两个#中的内容,若存在多个话题,每个url以英文逗号分隔,若没有则值为''
  • @用户:微博@的用户,若存在多个@用户,每个url以英文逗号分隔,若没有则值为''
  • 原始微博id:为转发微博所特有,是转发微博中那条被转发微博的id,那条被转发的微博也会存储,字段和原创微博一样,只是它的本字段为空
  • 结果文件:保存在当前目录“结果文件”文件夹下以关键词为名的文件夹里
  • 微博图片:微博中的图片,保存在以关键词为名的文件夹下的images文件夹里
  • 微博视频:微博中的视频,保存在以关键词为名的文件夹下的videos文件夹里
  • user_authentication:微博用户类型,值分别是蓝v黄v红v金v普通用户

使用说明

本程序的所有配置都在setting.py文件中完成,该文件位于“weibo-search\weibo\settings.py”。

1.下载脚本

$ git clone https://github.com/dataabc/weibo-search.git

2.安装Scrapy

本程序依赖Scrapy,要想运行程序,需要安装Scrapy。如果系统中没有安装Scrapy,请根据自己的系统安装Scrapy,以Ubuntu为例,可以使用如下命令:

$ pip install scrapy

3.安装依赖

$ pip install -r requirements.txt

4.设置cookie

DEFAULT_REQUEST_HEADERS中的cookie是我们需要填的值,如何获取cookie详见如何获取cookie,获取后将"your cookie"替换成真实的cookie即可。

5.设置搜索关键词

修改setting.py文件夹中的KEYWORD_LIST参数。 如果你想搜索一个关键词,如“迪丽热巴”:

KEYWORD_LIST = ['迪丽热巴']

如果你想分别搜索多个关键词,如想要分别获得“迪丽热巴”和“杨幂”的搜索结果:

KEYWORD_LIST = ['迪丽热巴', '杨幂']

如果你想搜索同时包含多个关键词的微博,如同时包含“迪丽热巴”和“杨幂”微博的搜索结果:

KEYWORD_LIST = ['迪丽热巴 杨幂']

如果你想搜索微博话题,即包含#的内容,如“#迪丽热巴#”:

KEYWORD_LIST = ['#迪丽热巴#']

也可以把关键词写进txt文件里,然后将txt文件路径赋值给KEYWORD_LIST,如:

KEYWORD_LIST = 'keyword_list.txt'

txt文件中每个关键词占一行。

6.设置搜索时间范围

START_DATE代表搜索的起始日期,END_DATE代表搜索的结束日期,值为“yyyy-mm-dd”形式,程序会搜索包含关键词且发布时间在起始日期和结束日期之间的微博(包含边界)。比如我想筛选发布时间在2020-06-01到2020-06-02这两天的微博:

START_DATE = '2020-06-01'
END_DATE = '2020-06-02'

7.设置FURTHER_THRESHOLD(可选)

FURTHER_THRESHOLD是程序是否进一步搜索的阈值。一般情况下,如果在某个搜索条件下,搜索结果很多,则搜索结果应该有50页微博,多于50页不显示。当总页数等于50时,程序认为搜索结果可能没有显示完全,所以会继续细分。比如,若当前是按天搜索的,程序会把当前的1个搜索分成24个搜索,每个搜索条件粒度是小时。这样就能获取在天粒度下无法获取完全的微博。同理,如果小时粒度下总页数仍然是50,会继续细分,以此类推。然而,有一些关键词,搜索结果即便很多,也只显示40多页。所以此时如果FURTHER_THRESHOLD是50,程序会认为只有这么多微博,不再继续细分,导致很多微博没有获取。因此为了获取更多微博,FURTHER_THRESHOLD应该是小于50的数字。但是如果设置的特别小,如1,这样即便结果真的只有几页,程序也会细分,这些没有必要的细分会使程序速度降低。因此,建议FURTHER_THRESHOLD的值设置在40与46之间

FURTHER_THRESHOLD = 46

8.设置结果保存类型(可选)

ITEM_PIPELINES是我们可选的结果保存类型,第一个代表去重,第二个代表写入csv文件,第三个代表写入MySQL数据库,第四个代表写入MongDB数据库,第五个代表下载图片,第六个代表下载视频。后面的数字代表执行的顺序,数字越小优先级越高。如果你只要写入部分类型,可以把不需要的类型用“#”注释掉,以节省资源;如果你想写入数据库,需要在setting.py填写相关数据库的配置。

9.设置等待时间(可选)

DOWNLOAD_DELAY代表访问完一个页面再访问下一个时需要等待的时间,默认为10秒。如我想设置等待15秒左右,可以修改setting.py文件的DOWNLOAD_DELAY参数:

DOWNLOAD_DELAY = 15

10.设置微博类型(可选)

WEIBO_TYPE筛选要搜索的微博类型,0代表搜索全部微博,1代表搜索全部原创微博,2代表热门微博,3代表关注人微博,4代表认证用户微博,5代表媒体微博,6代表观点微博。比如我想要搜索全部原创微博,修改setting.py文件的WEIBO_TYPE参数:

WEIBO_TYPE = 1

11.设置包含内容(可选)

CONTAIN_TYPE筛选结果微博中必需包含的内容,0代表不筛选,获取全部微博,1代表搜索包含图片的微博,2代表包含视频的微博,3代表包含音乐的微博,4代表包含短链接的微博。比如我想筛选包含图片的微博,修改setting.py文件的CONTAIN_TYPE参数:

CONTAIN_TYPE = 1

12.筛选微博发布地区(可选)

REGION筛选微博的发布地区,精确到省或直辖市,值不应包含“省”或“市”等字,如想筛选北京市的微博请用“北京”而不是“北京市”,想要筛选安徽省的微博请用“安徽”而不是“安徽省”,可以写多个地区,具体支持的地名见region.py文件,注意只支持省或直辖市的名字,省下面的市名及直辖市下面的区县名不支持,不筛选请用”全部“。比如我想要筛选发布地在山东省的微博:

REGION = ['山东']

13.配置数据库(可选)

MONGO_URI是MongoDB数据库的配置;
MYSQL开头的是MySQL数据库的配置。

14.运行程序

$ scrapy crawl search -s JOBDIR=crawls/search

其实只运行“scrapy crawl search”也可以,只是上述方式在结束时可以保存进度,下次运行时会在程序上次的地方继续获取。注意,如果想要保存进度,请使用“Ctrl + C”一次,注意是一次。按下“Ctrl + C”一次后,程序会继续运行一会,主要用来保存获取的数据、保存进度等操作,请耐心等待。下次再运行时,只要再运行上面的指令就可以恢复上次的进度。如果再次运行没有结果,可能是进度没有正确保存,可以先删除crawls文件夹内的进度文件,再运行上述命令。

如何获取cookie

  1. 用Chrome打开 https://weibo.com/
  2. 点击"立即登录", 完成私信验证或手机验证码验证, 进入新版微博. 如下图所示:

...

3. 按F12打开开发者工具, 在开发者工具的 Network->Name->weibo.cn->Headers->Request Headers, 找到"Cookie:"后的值, 这就是我们要找的cookie值, 复制即可, 如图所示:

...

兼容性说明: 获取旧版微博的Cookie

1.用Chrome打开https://passport.weibo.cn/signin/login
2.输入微博的用户名、密码,登录,如图所示: 登录成功后会跳转到https://m.weibo.cn;
3.按F12键打开Chrome开发者工具,在地址栏输入并跳转到https://weibo.cn,跳转后会显示如下类似界面: 4.依此点击Chrome开发者工具中的Network->Name中的weibo.cn->Headers->Request Headers,"Cookie:"后的值即为我们要找的cookie值,复制即可,如图所示:

weibo-search's People

Contributors

awxiaoxian2020 avatar cloudy-sfu avatar d1rtydann avatar dataabc avatar gohuntsuan avatar lan-ce-lot avatar po-d avatar rainlv avatar reilkay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weibo-search's Issues

OSError: [Win Error87] 参数错误。

在运行时发生以上错误,请问如何处理?
Traceback: search.py line 225 , in parse _by_hour_province
for weibo in self.parse_weibo(response):
search.py line 505 , in parse_weibo
print(weibo)
OSError: [WinError 87] 参数错误。

关于爬取微博类型的问题

作者你好,

我这边在爬取的时候选择了微博类型4:所有认证微博。因为认证人数是逐年增加的,所以我担心在爬取早年的微博的时候会只爬取当年的认证微博而不是根据目前300多万的认证微博来爬的。因此,想问一下,这个认证微博的判定是根据最新的认证数来判断是否为认证微博还是当年的认证数?

例如: 某一账号是2015年认证的,那他的2014年的微博是否算在认证微博里面能被爬取到?

选择热门微博,一次爬3天也是19页,一次一个月也是19页

选择热门微博,一次爬3天,它的运行流程是一个小时一个小时的搜的吗,还是说它根据获得的微博数量来判断是按一天一天来还是一小时一小时来,按这个情况来看它就是直接按高级搜索选择一个月,然后返回的19页爬取就完事了。现在我再手动一天一天的,好惨要2 3年的

cookie无效或已过期的问题

您好,
运行scrapy crawl search或者scrapy crawl search -s JOBDIR=crawls/search,都是在大概半分钟之后显示cookie无效或已过期;
按照教程已经换过两个账号获取的cookie都是这种情况,请问可能是什么问题。

报错:ModuleNotFoundError: No module named 'weibo.settings'; 'weibo' is not a package

运行环境:
OS: Manjaro 19.0.2 Kyria
Kernel: x86_64 Linux 5.4.30-1-MANJARO
WM: i3
CPU: AMD A8-4500M APU with Radeon HD Graphics @ 4x 1.9GHz
RAM: 2587MiB / 7401MiB

python:Python 3.8.2 (default, Feb 26 2020, 22:21:03) [GCC 9.2.1 20200130] on linux

已经安装:
pip install pillow
pip install scrapy
pip install weibo

报错详情:
Traceback (most recent call last):
File "/home/cream/.local/bin/scrapy", line 8, in
sys.exit(execute())
File "/home/cream/.local/lib/python3.8/site-packages/scrapy/cmdline.py", line 113, in execute
settings = get_project_settings()
File "/home/cream/.local/lib/python3.8/site-packages/scrapy/utils/project.py", line 69, in get_project_settings
settings.setmodule(settings_module_path, priority='project')
File "/home/cream/.local/lib/python3.8/site-packages/scrapy/settings/init.py", line 287, in setmodule
module = import_module(module)
File "/usr/lib/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 970, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'weibo.settings'; 'weibo' is not a package

Klein 整合,爬取的页面是未登录的,没有cookie

我想使用接口的方式,定时去爬取,scrapy没有任何改动,只是外面包了一层klein,发现在setting中设置了cookie,但是仍是cookie已失效的问题,相同的cookie在未使用klein,通过脚本运行是可以顺利爬取到信息的,以下是我增加的代码:
class MyCrawlerRunner(CrawlerRunner):
"""
Crawler object that collects items and returns output after finishing crawl.
"""
def crawl(self, crawler_or_spidercls, *args, **kwargs):
# keep all items scraped
self.items = []

    # create crawler (Same as in base CrawlerProcess)
    crawler = self.create_crawler(crawler_or_spidercls)

    # handle each item scraped
    crawler.signals.connect(self.item_scraped, signals.item_scraped)

    # create Twisted.Deferred launching crawl
    dfd = self._crawl(crawler, *args, **kwargs)

    # add callback - when crawl is done cal return_items
    dfd.addCallback(self.return_items)
    return dfd

def item_scraped(self, item, response, spider):
    self.items.append(item)

def return_items(self, result):
    return self.items

def return_spider_output(output):
"""
:param output: items scraped by CrawlerRunner
:return: json with list of items
"""
# this just turns items into dictionaries
# you may want to use Scrapy JSON serializer here
return json.dumps([dict(item) for item in output])

@route("/spider")
def schedule(request):
runner = MyCrawlerRunner()
deferred = runner.crawl(SearchSpider)
deferred.addCallback(return_spider_output)
return deferred

run("localhost", 8080)

关于输出读取的问题

你好!我替换了检索的关键字,在ITEM_PIPELINES中选取的结果保存类型为前两个(去重和写入csv文件),但运行程序后生成的search文件夹中只有requests.queue,requests.seen和spider.state,其中只有requests.seen中显示有几串字符串。请问该如何正确读取输出呢?

关于持续爬取的问题

有个问下想咨询一下,关于持续爬取的。

比如我想持续关注某些关键字的微博,如果设定爬取4月21日至4月21日,那么如何实现自动爬取4月22日及以后的新微博呢

执行没有返回任何内容

新手小白,过程完全按照大大指示的方法,但是在cmd执行scrapy crawl search -s JOBDIR=crawls/search的时候,进程很快就结束了(抓取的数据没有更改),没有任何报错,数据库里也没有出现数据,不知道怎么回事啊!求助求助啊!

整段抓取微博数与分段搜索结果数不匹配

我在微博高级搜索页面从2015-07-30到2020-02-29以月份为递增区间搜索某关键词(第一个区间仅为2015-07-30到07-31),把搜索结果页面上方显示的结果条数相加得到的总数为493,032条;而使用weibo-search一次性抓取2015-07-30到2020-02-29的结果条数为119,937条。不太清楚两个数字不匹配的原因。

关于 No module named 'weibo.utils' 问题

大神你好,感谢您的代码,有个问题不知道怎么解决,恳请您帮助。
我用sublime运行search的时候,出现了下面的错误:
Traceback (most recent call last):
File "/Users/hanshaoqing/Downloads/weibo-search-master/weibo/spiders/search.py", line 10, in
import weibo.utils.util as util
ModuleNotFoundError: No module named 'weibo.utils'; 'weibo' is not a package
[Finished in 0.6s with exit code 1]
[cmd: ['/Library/Frameworks/Python.framework/Versions/3.7/bin/python3', '-u', '/Users/hanshaoqing/Downloads/weibo-search-master/weibo/spiders/search.py']]
[dir: /Users/hanshaoqing/Downloads/weibo-search-master/weibo/spiders]
[path: /Library/Frameworks/Python.framework/Versions/3.7/bin:/Users/anaconda3/bin:/Users/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin]

这个是什么原因啊?怎么解决?

数据库问题

关键字筛选可以爬下来用户资料吗,比如性别什么的,关键字筛选下来就只有一个weibo表

OSError: [WinError 87] 参数错误。

{'created_at': '2020-06-12 13:52',
 'id': '4514990885256149',
 'location': '',
 'text': '#严浩翔时代少年团主rap担#yhx#严浩翔镜头雷达#�第一rapper��严浩翔��飒人气场��严浩翔��美颜如画��严浩翔��唱跳俱佳��严浩翔?2020
-12-09 14:01:11 [scrapy.core.scraper] ERROR: Spider error processing <GET https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:51:1000&scop
e=ori&suball=1&timescope=custom:2020-08-19-6:2020-08-19-7&page=1> (referer: https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&scope=ori&suball=1&times
cope=custom:2020-08-19-6:2020-08-19-7&page=1)
Traceback (most recent call last):
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\defer.py", line 120, in iter_errback
    yield next(it)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in process_spider_output
    for x in result:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 340, in <genexpr>
    return (_set_referer(r) for r in result or ())
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "E:\weibo-search\weibo\spiders\search.py", line 237, in parse_by_hour_province
    for weibo in self.parse_weibo(response):
  File "E:\weibo-search\weibo\spiders\search.py", line 517, in parse_weibo
    print(weibo)
OSError: [WinError 87] 参数错误。
{'created_at': '2020-06-12 13:52',
 'id': '4514990885256149',
 'location': '',
 'text': '#严浩翔时代少年团主rap担#yhx#严浩翔镜头雷达#�第一rapper��严浩翔��飒人气场��严浩翔��美颜如画��严浩翔��唱跳俱佳��严浩翔?2020
-12-09 14:01:17 [scrapy.core.scraper] ERROR: Spider error processing <GET https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:44:53&scope=
ori&suball=1&timescope=custom:2020-08-19-5:2020-08-19-6&page=1> (referer: https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:44:1000&scop
e=ori&suball=1&timescope=custom:2020-08-19-5:2020-08-19-6&page=1)
Traceback (most recent call last):
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\defer.py", line 120, in iter_errback
    yield next(it)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in process_spider_output
    for x in result:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 340, in <genexpr>
    return (_set_referer(r) for r in result or ())
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "E:\weibo-search\weibo\spiders\search.py", line 274, in parse_page
    for weibo in self.parse_weibo(response):
  File "E:\weibo-search\weibo\spiders\search.py", line 517, in parse_weibo
    print(weibo)
OSError: [WinError 87] 参数错误。
{'created_at': '2020-06-12 13:52',
 'id': '4514990885256149',
 'location': '',
 'text': '#严浩翔时代少年团主rap担#yhx#严浩翔镜头雷达#�第一rapper��严浩翔��飒人气场��严浩翔��美颜如画��严浩翔��唱跳俱佳��严浩翔?2020
-12-09 14:01:28 [scrapy.core.scraper] ERROR: Spider error processing <GET https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:44:52&scope=
ori&suball=1&timescope=custom:2020-08-19-5:2020-08-19-6&page=1> (referer: https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:44:1000&scop
e=ori&suball=1&timescope=custom:2020-08-19-5:2020-08-19-6&page=1)
Traceback (most recent call last):
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\defer.py", line 120, in iter_errback
    yield next(it)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in process_spider_output
    for x in result:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 340, in <genexpr>
    return (_set_referer(r) for r in result or ())
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "E:\weibo-search\weibo\spiders\search.py", line 274, in parse_page
    for weibo in self.parse_weibo(response):
  File "E:\weibo-search\weibo\spiders\search.py", line 517, in parse_weibo
    print(weibo)
OSError: [WinError 87] 参数错误。
{'created_at': '2020-06-12 13:52',
 'id': '4514990885256149',
 'location': '',
 'text': '#严浩翔时代少年团主rap担#yhx#严浩翔镜头雷达#�第一rapper��严浩翔��飒人气场��严浩翔��美颜如画��严浩翔��唱跳俱佳��严浩翔?2020
-12-09 14:01:39 [scrapy.core.scraper] ERROR: Spider error processing <GET https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:44:51&scope=
ori&suball=1&timescope=custom:2020-08-19-5:2020-08-19-6&page=1> (referer: https://s.weibo.com/weibo?q=%E5%8F%B0%E9%A3%8E&region=custom:44:1000&scop
e=ori&suball=1&timescope=custom:2020-08-19-5:2020-08-19-6&page=1)
Traceback (most recent call last):
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\defer.py", line 120, in iter_errback
    yield next(it)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\utils\python.py", line 353, in __next__
    return next(self.data)
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in process_spider_output
    for x in result:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 340, in <genexpr>
    return (_set_referer(r) for r in result or ())
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
    return (r for r in result or () if _filter(r))
  File "d:\programdata\anaconda3\lib\site-packages\scrapy\core\spidermw.py", line 62, in _evaluate_iterable
    for r in iterable:
  File "E:\weibo-search\weibo\spiders\search.py", line 274, in parse_page
    for weibo in self.parse_weibo(response):
  File "E:\weibo-search\weibo\spiders\search.py", line 517, in parse_weibo
    print(weibo)
OSError: [WinError 87] 参数错误。

我将search.py里的50改成了45,然后自己注释掉了一些爬取项,程序会成功运行一段时间,直到碰到这条微博然后就卡住了一直报错,不知道这条微博有什么特殊的地方。

能否考虑增加”找人"功能?

首先感谢作者啦!然后我发现现在这个search是search微博,有没有可能用同样的架构搜索用户呢?比如在微博的网页端看到的tab应该是“找人”,输入特定关键词比如昵称里带“xx“就可以找到,也可以specify是否机构用户等等等等,感觉会很有用。

关于输出信息。

您好,打扰了,十分感谢您的辛苦提供了这么好的途径。想问下您这个输出,是否能够获取每条微博账户的注册地信息呢?

地区问题,微博类型

大大,我是一名最近在学爬虫的小白,在您的GitHub上看到一个项目关于微博爬虫的 weibo-search ,有一些方面不太明白:

  1. 在爬取每个不同地区不同省份发的微博,您是用的什么方法达到搜索的呀?
  2. 如果我在搜索多个关键词的时候,是应该都放到列表里面吗?这样搜索到的是多个关键词的并集还是交集呢?如果不爬官方微博,微博类型应该怎么选择?
  3. 如果想把转发微博的内容替换成 原来的微博内容,这可以做到吗?
    不好意思,刚刚入门,感谢大神指点一二,哈哈哈哈哈哈

报编码错误的问题

麻烦请教一下,执行scrapy crawl search -s JOBDIR=crawls/search 命令后,报“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)” 错误的问题

使用情况反馈

大佬。是不是改这几个地方就可以使用了

'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7',
'cookie': 'your cookie'

settings.py 里的cookies也是weibo.cn获取

class SearchSpider(scrapy.Spider):
name = 'search'
allowed_domains = ['weibo.com']
keyword_list = ['迪丽热巴']
base_url = 'https://s.weibo.com'
start_date = '2020-03-01'
end_date = '2020-03-01'

search.py里只需要改动日期和关键字

然后在根目录里运行
scarpy crawl search

就可以了吧?

爬取时会爬取设定时间之外的微博

我发现输出的csv结果中会出现很多不在设定startdate和enddate之间的结果

我修改了 pipelines.py 里的 CsvPipeline类中的process_item函数,使其能在输出结果时创建多个 文件名中包含不同日期的csv文件
方便整理

file_path = base_dir + os.sep + item['keyword'] + '_' + item['weibo']['created_at'].split(' ', 1)[0] + '.csv'

发现生成了大量不在日期间的文件,打开文件后 发现果然是['created_at']这项不在设定时期内 可能是search.py有问题 我还未查找出来。

cookie无效或已过期

如题。完全按照文档方法获取的cookie,setting.py中COOKIES_ENABLED的值改为True,但是无法使用。

cookie无效或已过期

你好,近日使用该文件出现了问题:

我已经下载好所有文件,并在terminal cd到weibo-search目录并直接运行了scrapy crawl search,但是还是出现了以下问题(cookie无效或已过期):

(以下是terminal的代码)
(base) maizixindeMacBook-Pro:~ maizixin$ cd /Users/maizixin/Desktop/毕业论文/python类/test/weibo_三件套/weibo-search-master

(base) maizixindeMacBook-Pro:weibo-search-master maizixin$ scrapy crawl search
cookie无效或已过期,请按照https://github.com/dataabc/weibo-search#如何获取cookie 获取cookie

另外,settings.py中除了contain_type 修改为 = 1之外再无其他改动;
OS:macOS Catalina 10.15.3
Python ver: 3.7.4

请问该如何解决呢?谢谢1

cookie无效或者过期

你好!近日使用您的代码出现了cookie无效或者过期的问题:

我是直接在terminal上cd 到scrapy.cfg的目录中再scrapy crawl search的,并且setting.py中只修改了contain_type的值(修改为1),此外并无做其他改变,请问是出现什么问题吗?

OS: macOS Catalina 10.15.3
Python ver: 3.7.4

🙏谢谢!

需要爬取同时包含多个关键词的微博,但是返回了一些只包含其中一个关键词的微博?

很奇怪的是,需要爬取同时包含多个关键词的微博,但是返回了一些只包含其中一个关键词的微博?就是按照作者您在readme中写的格式爬取的:
如果你想搜索同时包含多个关键词的微博,如同时包含“迪丽热巴”和“杨幂”微博的搜索结果:
KEYWORD_LIST = ['迪丽热巴 杨幂']
而且,还有个问题,就是我觉得微博是不是内部存在分词?比如因为我输入['迪丽热巴杨幂']这个关键词,仍然会返回包含“迪丽热巴”和“杨幂”的微博?

如何强制性停止运行的程序?

您好,我用命令行cmd执行的程序,但是在按关键词搜的时候发现自己关键词弄错了,然后这个关键词的数据特别多,原来以为关掉换个关键词再运行就可以了,,没想到再运行还是会根据上次的关键词接着运行……请问怎么强制性停止这个关键词的搜索啊?

能否搜索指定超话?

hello 作者~我试图搜索特定超话内的微博,留意到weibospider爬下来的显示超话内帖子的格式是#XX[超话]#,于是我用了'#XX[超话]#'这个格式来试图在weibo-search这个程序爬取特定超话,但是似乎失败了?

请问我是搜索格式有问题,还是本程序暂时不支持搜索超话内容?如无,有考虑加上吗?

更换检索关键字的问题

大神你好!在KEYWORD_LIST更换检索的关键字,为何还是采集之前关键字的内容,除了把KEYWORD_LIST中的关键字更改外,还需要做其他的操作吗? 谢谢!

微博数据数据不全,貌似只能爬取到前50页的内容?

大大,感谢你的分享,你的分享对刚刚入门爬虫的我很有帮助,但是在应用你的框架时,遇到了一些问题,想跟您请教一下:
一、通过在关键词列表中设置[A,B,C]三个关键词,出现的相关问题有:
1.通过微博的高级搜索单独搜索A,,可以搜到大概50页的内容,但是通过运行Scrapy框架获得数据只有2条,对于这种数据结果不一致还有总数据量收到限制的情况可以怎么解决啊?
2.在爬取C关键词的结果里,获取了很多与C关键词无直接关系的数据,例如C关键词=“建筑信息”,但是很多条数据仅含有“建筑”一词,貌似不是精准的,请问这种情况是什么原因造成的呢?

关于weibo-search的执行问题

大神你好!谢谢您的无私奉献!因为你的程序简化了我编写代码的时间同时也给我很大的启发!
我是一位小白,我在执行weibo-search的时候出现
from urllib.parse import unquote
ImportError: No module named parse
的错误讯息 不晓得是不是有问题?
望回覆
谢谢您

OSError: [WinError 87] 参数错误。

在采集去年8月的数据的时候出现OSError: [WinError 87]这个错误。
Traceback (most recent call last):
File "d:\python37\lib\site-packages\scrapy\utils\defer.py", line 120, in iter_errback
yield next(it)
File "d:\python37\lib\site-packages\scrapy\utils\python.py", line 347, in next
return next(self.data)
File "d:\python37\lib\site-packages\scrapy\utils\python.py", line 347, in next
return next(self.data)
File "d:\python37\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "d:\python37\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in process_spider_output
for x in result:
File "d:\python37\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "d:\python37\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 340, in
return (_set_referer(r) for r in result or ())
File "d:\python37\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "d:\python37\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in
return (r for r in result or () if _filter(r))
File "d:\python37\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "d:\python37\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in
return (r for r in result or () if _filter(r))
File "d:\python37\lib\site-packages\scrapy\core\spidermw.py", line 64, in _evaluate_iterable
for r in iterable:
File "C:\Users\User\Desktop\coding\weibo-search-master\weibo\spiders\search.py", line 196, in parse_by_hour
for weibo in self.parse_weibo(response):
File "C:\Users\User\Desktop\coding\weibo-search-master\weibo\spiders\search.py", line 517, in parse_weibo
print(weibo)
OSError: [WinError 87] 参数错误。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.