python爬取某个博主微博动态

  以chrome为例

微博页数的显示只有网址后面的page在变化,这个就很容易获取到每页动态的网址,当然直接get是获取不到的,记得带上cookie

最主要的是微博是网页分段加载的,没有办法一次性获取到全部内容,那么就要找到它中途又发送了那些请求

可以看到这个新的url,也就是我们需要的url

然后可以发现,区别就在于这个pagebar,pagebar的值在为0和1时分别又加载了一次网页,因此,我们发送请求时就要加上这个pagebar

page和pre_page数值相同,虽然在当前页面并没有改变,但是也还是不能忽略,要带着这两个参数,然后,就可以获得返回的json数据

之后就获取想要的内容就好了

代码样例为获取前十页每条动态的文字信息:

import requests
from lxml import etree
import json

headers = {
    'Accept': '*/*',
    'Connection': 'keep-alive',
    'Cookie': 'SINAGLOBAL=7547742164796.669.1557814374521; wvr=6; UOR=vjudge.net,widget.weibo.com,www.baidu.com; Ugrow-G0=d52660735d1ea4ed313e0beb68c05fc5; login_sid_t=5355b1f41984fbcab1e7f06ce5e56348; cross_origin_proto=SSL; TC-V5-G0=28bf4f11899208be3dc10225cf7ad3c6; WBStorage=f54cf4e4362237da|undefined; _s_tentry=passport.weibo.com; Apache=137824208234.45386.1567069036053; ULV=1567069036066:8:4:2:137824208234.45386.1567069036053:1566997217080; wb_view_log=1366*7681; SCF=Ah0xAfGqEnBKvHeo0pUZh35Mu9kMRIv3xACyV4NhxHz6vEmrCbVYAZNMkq28jwwjv3izlLBbVs0-1wHJgB802KI.; SUB=_2A25wY-PeDeRhGeBH6lcQ9SrMyjmIHXVTGVIWrDV8PUNbmtAKLUfgkW9NQcb_zmmXRFBtE4vRVttRPlpfY4_u__na; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5PjVhlq3PienOo1MfYibdR5JpX5KzhUgL.Foq4eK-pSKB7eK-2dJLoIpzLxKMLBK-LBKBLxKqLBo.LB-zt; SUHB=0KAhxcJ_lXGMkr; ALF=1598605070; SSOLoginState=1567069071; wb_view_log_6915154015=1366*7681; webim_unReadCount=%7B%22time%22%3A1567069360213%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22allcountNum%22%3A0%2C%22msgbox%22%3A0%7D; TC-Page-G0=ac3bb62966dad84dafa780689a4f7fc3|1567069357|1567069073',    'Host': 'weibo.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}

url = 'https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100505&is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page={}'+'&pagebar={}'+'&pl_name=Pl_Official_MyProfileFeed__20&id=1005055884092313&script_uri=/p/1005055884092313/home&feed_type=0&pre_page={}'+'&domain_op=100505&__rnd=1567077491458'
url2 = 'https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100505&is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page={}&pl_name=Pl_Official_MyProfileFeed__20&id=1005055884092313&script_uri=/p/1005055884092313/home&feed_type=0&domain_op=100505&__rnd=1567077491458'
 

def parse_response(response,fp):
    json_data=json.loads(response)
    data = json_data['data']
    tree = etree.HTML(data)
    weibos = tree.xpath('//div[@class="WB_detail"]/div[@class="WB_text W_f14"]')
    for i in range(len(weibos)):
        content = weibos[i].xpath('string(.)')
        content = str(content).strip()
        fp.write(content+'\n\n')

def main():
    fp = open('test.txt','w',encoding='utf-8')
    global url, url2
    for i in range(1,11):
        response = requests.get(url=url2.format(i), headers=headers).text
        parse_response(response, fp)
        for page in range(2):
            response = requests.get(url=url.format(i,page,i), headers=headers).text
            parse_response(response, fp)
    fp.close()
 
if __name__ == '__main__':
    main()

 

 

### 回答1: 要想爬取指定时间的微博,可以使用Python语言,借助第三方库来实现。 首先,我们需要登录微博账号,可以使用Selenium库来模拟浏览器登录账号。登录成功后,可以使用BeautifulSoup库从页面中解析出需要的数据。 接着,我们需要构造搜索关键字和时间段。可以使用urlencode函数将关键字和时间段拼接成URL参数,并使用requests库发起请求。在发送请求时,可以设置请求头信息以模拟浏览器请求。 当接收到响应后,我们需要从页面中解析出微博内容。可以使用正则表达式或BeautifulSoup库解析HTML,从中提取出需要的信息。 最后,将爬取到的微博内容存储到本地文件或数据库中,方便后续处理和分析。 需要注意的是,微博爬虫行为有一定的限制,如果频繁访问同一链接,可能会触发微博的反爬机制,导致IP被封禁,因此爬虫过程中需要注意控制爬取频率。 ### 回答2: 要使用Python爬取指定时间的微博,我们可以通过以下步骤完成。 首先,我们需要安装相关的Python库。我们可以使用Python库中的requests库来发送HTTP请求获取网页内容,使用BeautifulSoup库来解析网页内容,以及使用selenium库来模拟浏览器行为。 接下来,我们需要登录微博账号来获取相应的权限。我们可以使用selenium库来模拟用户登录微博,并保存登录后的cookies。 然后,我们可以使用requests库发送HTTP请求来获取特定时间范围内的微博页面内容。我们可以构造适当的URL,并使用保存的cookies来验证权限。获取到的内容可以通过BeautifulSoup库进行解析。 最后,我们可以从解析的页面中提取出我们想要的信息,例如微博的内容、用户信息等等。我们可以使用正则表达式或BeautifulSoup库来定位和提取相应的信息。 综上所述,凭借Python中的相关库,我们可以很方便地实现爬取指定时间的微博的功能。 ### 回答3: 要用Python爬取指定时间的微博,首先需要了解微博爬取方式。微博网页版的URL结构可以通过观察分析得知,通过模拟请求这些URL,我们就可以获取指定时间的微博内容。 接下来,我们可以使用Python爬虫框架Scrapy来实现微博爬取。首先,我们需要创建一个Scrapy项目,然后在该项目的`spiders`文件夹中创建一个爬虫文件。 在爬虫文件中,我们需要定义`start_requests`方法来发送请求。我们可以使用`start_urls`来指定微博页面的URL,同时可以传递参数来指定时间段。可以通过修改URL的查询参数来实现。 爬取到的微博内容可以通过解析网页的HTML文档来获取。使用XPath或BeautifulSoup等库可以方便地提取出微博的内容、发布时间等信息。可以通过相应的选择器来定位HTML中的微博元素,然后提取相关信息。 最后,我们可以将爬取微博内容保存到数据库或文件中,以便进一步处理和分析。可以使用Python的数据库库或文件操作库来实现。 在编写爬虫代码时,需要注意尊重网站的爬取规则,不要对网站造成过大的访问压力。可以适当设置请求的间隔时间,并且避免同时进行过多的并发请求。 总之,通过以上的步骤,我们可以使用Python爬取指定时间的微博,并且提取出所需的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值