python爬虫,为什么可以正常爬取数据,但程序还是走了为了提示报错而写的 except 里的内容?

为什么可以正常爬取数据,但程序还是走了为了提示报错而写的 except 里的内容?

import requests

from lxml import etree

import csv

from datetime import datetime

import time

def doSth():

try:

# 1.目标 url。

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

# 模拟浏览器请求头

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}

# 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('//tr/td/a/@href')

link_try = html.xpath('//tr/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')

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()

停止运行后,还报了两个错
python爬虫,为什么可以正常爬取数据,但程序还是走了为了提示报错而写的 except 里的内容?

之前一直用这个可以跑,就这几天突然出现了问题。


回答:

for i, rank in enumerate(rank):

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

应该是这里出现了问题,排查下这个i的取值范围是不是超过了affair或者view这两个数组的元素个数。


回答:

你只是朴素的认为自己的程序没有错,其实你抓到的只是一段js,并没有抓到网页的内容。
应该用selenium模拟浏览器动态加载才能请求到内容。
另外别搞while true,意义不大,你的ip地址应该已经被封了,再想大量请求到内容的话,尽量加个代理。

以上是 python爬虫,为什么可以正常爬取数据,但程序还是走了为了提示报错而写的 except 里的内容? 的全部内容, 来源链接: utcz.com/p/937960.html

回到顶部