关于#python#的问题,如何解决?

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'
试试看绝对路径
这是找不到文件或者路径不对

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7667012
  • 你也可以参考下这篇文章:基于Python的百度地图慧眼迁徙数据爬取
  • 同时,你还可以查看手册:python-数据压缩和存档 中的内容
  • 除此之外, 这篇博客: 基于python爬取有道翻译,并在线翻译中的 基于python爬取有道翻译,并在线翻译 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 由于我也是爬虫新学者,有什么做的不对的请多加包涵
    我们需要使用的库如下

    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可以更方便的找到正则信息
    有什么不懂得或者您对这篇文章有什么指教的欢迎留言!
    谢谢

  • 您还可以看一下 龙豪杰老师的Python网络爬虫课程中的 python语言的发展历程介绍小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料提供的代码,可以看出使用的库和方法有: 1. requests库的get方法用于发送HTTP GET请求获取网页源代码。 2. docx库的Document类用于创建Word文档。 3. lxml库的etree类用于使用XPath解析HTML文档。

    由于没有具体的错误或异常信息,不能准确判断问题出在哪里。以下是一些可能的解决方案和建议:

    1. 网络连接问题:首先确保你的网络连接没有问题,可以尝试打开所爬取的网页地址,检查是否能正常访问。

    2. 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'。

    3. HTTP请求超时设置:可以考虑增加超时参数timeout,例如设置timeout=10,确保在请求过程中能够及时接收响应。

    4. xpath提取数据问题:可以先尝试打印response.text或者检查网页源代码,确认所需数据的XPath路径是否正确。可以使用浏览器的开发者工具来查看网页的HTML结构,确定所需数据的XPath路径是否正确。

    5. 网站反爬虫机制:如果爬取的网站有反爬虫机制,可能需要使用代理IP或者模拟登录等方式来绕过限制。可以尝试查看网站的robots.txt文件,了解网站的爬取规则。

    由于无法准确判断具体的错误或异常信息,上述建议仅供参考。如果问题还未解决,建议提供更多具体的错误或异常信息,以便进一步分析和解决问题。