你好 我刚学python 想问一下:程序能运行,但没有爬到数据。这是为什么
import urllib.request
import re
header=("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400")
opener=urllib.request.build_opener()
opener.addheaders=[header]
urllib.request.install_opener(opener)
data=urllib.request.urlopen("http://www.csrc.gov.cn/guestweb4/s?searchWord=%25E4%25BC%259A%25E8%25AE%25A1%25E5%25B8%2588%25E4%25BA%258B%25E5%258A%25A1%25E6%2589%2580%25E8%25A1%258C%25E6%2594%25BF%25E5%25A4%2584%25E7%25BD%259A&column=%25E5%2585%25A8%25E9%2583%25A8&pageSize=10&pageNum=1&siteCode=bm56000001&sonSiteCode=&checkHandle=1&searchSource=0&govWorkBean=%257B%257D&sonSiteCode=&areaSearchFlag=-1&secondSearchWords=&topical=&docName=&label=&countKey=0&uc=0&left_right_index=0&searchBoxSettingsIndex=&manualWord=%25E8%25A1%258C%25E6%2594%25BF%25E5%25A4%2584%25E7%25BD%259A&orderBy=2&startTime=2020-01-01%2000:00:00&endTime=2023-04-20%2023:59:59&timeStamp=5&strFileType=&wordPlace=0").read().decode("utf-8","ignore")
pat=' … '
allurl=re.compile(pat).findall(data)
allurl
for i in range(0,len(allurl)):
try:
thisurl=allurl[i]
file="C:/Users/zft/Desktop/pyton练习/处罚公告/"+str(i)+".html"
urllib.request.urlretrieve(thisurl,filename=file)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
你先检查一下爬取网站网址是否正确
您在代码中使用了 urllib 库进行网页爬取。如果您的程序能够运行,但没有爬到数据,可能是由于以下原因:
网址无法访问或网站响应慢:您可以尝试访问该网站并手动查看是否可以访问。如果该网站无法访问,则可能是因为它正在维护或者被限制了访问。如果网站响应慢,您可以尝试增加 timeout 参数的值,以便让程序等待更长的时间来获取数据。
网站的 HTML 结构或内容已更改:在使用正则表达式或其他解析 HTML 的方法时,如果网站的 HTML 结构或内容发生更改,您的代码可能无法正确匹配所需数据。您可以尝试使用 Beautiful Soup 等库来解析 HTML,以确保更准确地获取所需数据。
请求头或其他参数设置不正确:在进行网页爬取时,有些网站可能会根据请求头中的 User-Agent 等参数来识别爬虫。如果您的请求头设置不正确,可能会导致无法获取数据。您可以尝试使用浏览器的开发者工具来查看正确的请求头设置,以便将其复制到您的代码中。
网站需要登录或使用验证码:有些网站可能需要用户登录或通过验证码等方式进行验证才能访问数据。如果您的代码无法正确处理这些验证过程,可能会导致无法获取数据。您可以尝试手动登录该网站并在代码中使用 Cookie 来进行认证,或者使用第三方库(如 Selenium)来模拟浏览器行为以绕过验证过程。
希望这些提示能够帮助您找到问题所在,如果您需要进一步的帮助,请随时告诉我。
可以从以下情况进行分析:
1.没有语法错误不代表没有逻辑错误
IDE工具毕竟不是人工智能,即使是人工智能也能力有限
我们可以新建一个地方
写一个输出看是否能正常运行,可以的话我们排除编译器错误
可以百分百肯定是自己代码错误而不是编译器的问题
2.一般的错误IDE都会报出,可是运行程序没有任何反应
说明程序第一行就有错误
在第一行写一个检查点输出python为例
print(“mymain检查点1”)
把它放在所以代码之前记住是所有代码之前
第二行再写一个print
依次类推
图示
我们可以看到界面满是警告,没有错误提示
运行主模块mymain竟然没有任何结果
我们加入多个检查点
每一个类运行依次,再次运行mymain
这时出现了报错如下:
报错显示
其他各检查点安排
我们可以看到输出 mymain检查点1就没有接着输出mymain检查点2
原来程序的第一行就有错误,导致mymain相当于一个空程序点击运行会一直挂着
mymain没有执行是因为 improt HC里面有错误
HC里面是因为import LXTTable里面有错误
LXTTbale里面是因为 class LXTable(object)里面有错误
而错误是第23行函数zzsj()报错
missing 2 required 参数 cls qssj
究其根本是因为代码第一行就错了,导致Mymain相当于是一个空程序
一直在运行挂着
因为import的连环引用
导致编译器无法察觉底层错误
必须设置检查点
每个类运行一次
再运行主程序
才能正常报错