python爬取地铁数据失败
```python
runfile('C:/Users/lh168/.spyder-py3/temp.py', wdir='C:/Users/lh168/.spyder-py3')
开始获取2号线数据
2号线数据爬取失败
开始获取1号线数据
1号线数据爬取失败
开始获取3号线数据
3号线数据爬取失败
Traceback (most recent call last):
File ~\.spyder-py3\temp.py:194 in <module>
get_station()
File ~\.spyder-py3\temp.py:115 in get_station
data = pd.read_csv(r"./{}_subway_data.csv".format(city_name),encoding="gbk",engine="python",
File D:\Anacoda\lib\site-packages\pandas\util\_decorators.py:311 in wrapper
return func(*args, **kwargs)
File D:\Anacoda\lib\site-packages\pandas\io\parsers\readers.py:680 in read_csv
return _read(filepath_or_buffer, kwds)
File D:\Anacoda\lib\site-packages\pandas\io\parsers\readers.py:575 in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File D:\Anacoda\lib\site-packages\pandas\io\parsers\readers.py:933 in __init__
self._engine = self._make_engine(f, self.engine)
File D:\Anacoda\lib\site-packages\pandas\io\parsers\readers.py:1217 in _make_engine
self.handles = get_handle( # type: ignore[call-overload]
File D:\Anacoda\lib\site-packages\pandas\io\common.py:789 in get_handle
handle = open(
FileNotFoundError: [Errno 2] No such file or directory: './厦门_subway_data.csv'
问题点: FileNotFoundError
分析思路: 一般是指文件路径错误,导致文件找不到. (./一般是指当前目录,相当于C:/Users/lh168/.spyder-py3这个目录)
解决办法:
①将厦门_subway_data.csv放到C:/Users/lh168/.spyder-py3这个目录下;
②用绝对路径替代./.
FileNotFoundError: [Errno 2] No such file or directory: './厦门_subway_data.csv'
试试看绝对路径
这是找不到文件或者路径不对
由于我也是爬虫新学者,有什么做的不对的请多加包涵
我们需要使用的库如下
from urllib import request
import urllib
import re
import random
爬虫新学者建议先使用urllib库学习,然后使用更简洁的resquests库
我的请求头有点不一样,你们可以改变一下
# 构造请求头信息,随机抽取信息
agent1 = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
agent2 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'
agent3 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
agent4 = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR ' \
'3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) '
agent5 = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR ' \
'3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) '
list1 = [agent1, agent2, agent3, agent4, agent5]
agent = random.choice(list1)
# 打印请求头信息
print(agent)
header = {
'User-Agent': agent
}
好了,直接上代码
from urllib import request
import urllib
import re
import random
# 有道翻译
# 构造请求头信息,随机抽取信息
agent1 = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
agent2 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'
agent3 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
agent4 = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR ' \
'3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) '
agent5 = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR ' \
'3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) '
list1 = [agent1, agent2, agent3, agent4, agent5]
agent = random.choice(list1)
# 打印请求头信息
print(agent)
header = {
'User-Agent': agent
}
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
key = input("请输入要翻译的内容:")
# post请求需要提交的参数
# 请在网页HTML中查找
formdata = {
"i": key,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": "15503049709404",
"sign": "3da914b136a37f75501f7f31b11e75fb",
"ts": "1550304970940",
"bv": "ab57a166e6a56368c9f95952de6192b5",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTIME",
"typoResult": "false"
}
data = urllib.parse.urlencode(formdata).encode(encoding='utf-8')
req = request.Request(url, data=data, headers=header)
resp = request.urlopen(req).read().decode()
# 正则表达式 提取"tgt":"和"}]]中间的任意内容
# 或者使用bs4库直接提取,本人更喜欢bs4,但是正则表达式也是要学的
pat = r'"tgt":"(.*?)"}]]'
result = re.findall(pat, resp)
print(result[0])
使用xpath可以更方便的找到正则信息
有什么不懂得或者您对这篇文章有什么指教的欢迎留言!
谢谢
根据参考资料提供的代码,可以看出使用的库和方法有: 1. requests库的get方法用于发送HTTP GET请求获取网页源代码。 2. docx库的Document类用于创建Word文档。 3. lxml库的etree类用于使用XPath解析HTML文档。
由于没有具体的错误或异常信息,不能准确判断问题出在哪里。以下是一些可能的解决方案和建议:
网络连接问题:首先确保你的网络连接没有问题,可以尝试打开所爬取的网页地址,检查是否能正常访问。
User-Agent设置:根据代码中的user-agent头信息可以看出使用的是Chrome浏览器,可以尝试将user-agent设置为其他浏览器或模拟真实的浏览器请求头信息,例如将user-agent设置为'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'。
HTTP请求超时设置:可以考虑增加超时参数timeout,例如设置timeout=10,确保在请求过程中能够及时接收响应。
xpath提取数据问题:可以先尝试打印response.text或者检查网页源代码,确认所需数据的XPath路径是否正确。可以使用浏览器的开发者工具来查看网页的HTML结构,确定所需数据的XPath路径是否正确。
网站反爬虫机制:如果爬取的网站有反爬虫机制,可能需要使用代理IP或者模拟登录等方式来绕过限制。可以尝试查看网站的robots.txt文件,了解网站的爬取规则。
由于无法准确判断具体的错误或异常信息,上述建议仅供参考。如果问题还未解决,建议提供更多具体的错误或异常信息,以便进一步分析和解决问题。