微博热搜是爬取不了吗?

微博热搜是爬取不了吗?

微博热搜是爬取不了吗?我检查了热搜的网页代码也没变啊,就是莫名其妙爬不了,也没有报错~

import requests

from lxml import etree

import csv

from datetime import datetime

import time

import copy

def doSth():

try:

# 1.目标 url。

url = 'https://s.weibo.com/top/summary?cate=realtimehot'

# 模拟浏览器请求头

headers = {

'User-Agent': "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"}

# 2.发送请求

data = requests.get(url, headers=headers).text

# 转换

html = etree.HTML(data)

# 3.解析数据 xpath 取出来的数据是一个列表。

# 排名

rank = html.xpath('//td[@class="td-01 ranktop"]/text()')

# 事件

affair = html.xpath('//td[@class="td-02"]/a/text()')

affair.pop(0) # 忽略微博热搜的置顶推荐内容。 # .pop(n) :删除列表第 n+1 个元素。

# 热度

view = html.xpath('//td[@class="td-02"]/span/text()')

# 链接

link = html.xpath('//td/a/@href')

link_try = html.xpath('//td/a/@href_to')

link.pop(0)

# 处理链接数据(因为链接的 html 位置可能存在不同的地方,所以做了以下判断)

index = 0

for i, sku in enumerate(link): # 这里的 i 和 sku 是什么?这里的 i 和最后保存时最后的代码里的 i 一样吗?

if sku == "javascript:void(0);":

link[i] = link_try[index]

index += 1

# 4.保存数据为 csv。

date = datetime.now().strftime('%Y-%m-%d %H-%M-%S')

# 删除没有热度的热搜(隐藏的热搜)

rank_new = copy.deepcopy(rank)

for r in range(len(rank_new)):

if not rank_new[r].isdigit():

rank.remove(rank_new[r])

del affair[r]

del link[r]

with open('./' + date + '.csv', 'w', newline='', encoding='utf-8-sig')as f:

writer = csv.writer(f)

writer.writerow(['排名', '事件', '热度', '链接'])

for i, rank in enumerate(rank):

writer.writerow([rank, affair[i], view[i], 'https://s.weibo.com' + link[i]])

# 5.睡眠120秒。

time.sleep(120)

except:

print(time.strftime("%Y-%m-%d %X"))

print("requests speed so high,need sleep!")

time.sleep(10)

print("continue...")

while True:

doSth()


回答:

from selenium import webdriver

import time

DRIVER_PATH = '' # chromdriver的地址

def selenium_chrome_test(url):

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument("--no-sandbox")

# 启用无痕模式

chrome_options.add_argument("--incognito")

chrome_options.add_argument("--disable-gpu")

# 取消自动软件控制提示

chrome_options.add_argument("disable-infobars")

prefs = {

'profile.default_content_setting_values': {'notifications': 2}

}

chrome_options.add_experimental_option("prefs", prefs)

global browser

browser = webdriver.Chrome(DRIVER_PATH, chrome_options=chrome_options)

browser.maximize_window()

browser.get(url)

time.sleep(5)

eles = browser.find_elements_by_xpath('//tbody//tr')

for ele in eles:

item_datas = ele.find_elements_by_xpath('./td')

title = item_datas[1].text

print(title)

href = item_datas[1].find_element_by_xpath('./a').get_attribute('href')

print(href)

if __name__ == '__main__':

url = 'https://s.weibo.com/top/summary?cate=realtimehot'

selenium_chrome_test(url=url)

以上是 微博热搜是爬取不了吗? 的全部内容, 来源链接: utcz.com/p/938120.html

回到顶部