我已经按照书上的指示一步步写下来的代码,可为啥结果还是出错了?
它的是linux系统,它给出的是一个绝对路径,tmp文件夹下一个文件
而你的是windows系统,没有tmp这个目录,你可以换成c盘根目录,d盘根目录之类的
open('D:/1.txt','w')
这样
正则表达式相信大家都接触过,没有接触过的也可以查看我曾今发过的两篇博客:从常用实例学习正则1、从常用实例学习正则2 来简单学习正则。
使用正则匹配网页中想要的数据时,有时候可能会设计比较复杂,比如:<img src="XXX" class="XX">
如果你正则写的是<img src="(.*?)" class="XX">
,那么当网页源码变成<img class="XX" src="XXX">
的时候,你就匹配不到结果了。所以正则匹配网页还是尽可能要广泛匹配,比如使用src="(.*?)"
不过这又可能匹配到其他地方。于是我们修改为<img.*src="XXX">
,这样能匹配所有img中的src属性,但这够了吗?这还不够,如果想要爬指定class的img的src属性怎么办…
所以使用正则,虽然看着写的不算多,但考虑设计正则表达式还是要花一番功夫的,而且不方便看懂,不方便后期维护。
接下来来看个实例:
首先先把本文所需的所有库和网页源码准备好,本文其他代码中就不在区分引用了:
import re
import requests
from lxml import etree
from pyquery import PyQuery
from bs4 import BeautifulSoup
from requests_html import HTMLSession
url = 'http://110.42.181.215:8866'
html = requests.get(url).text
然后呢,给自己一个需求,比如我要提取网页中id="plans"的子元素中id为plan2的ondblclick属性:
result = re.findall(r'οndblclick=\"(.*?)\"', re.findall(r'<div.*?id=\"plan2\".*?>', html)[0])[0]
# result结果:set_direction('plan2')
其他的什么网址、标题等都需要结合实际场景编写正则表达式,一般第一次提取出所有有关的标签,第二次才提取属性值,如果需要同时锁定style和class等,则需要多次匹配以确保在没有顺序的情况下能够准确获取。
这个问题是因为找不到要创建文件的路径,需要给出具体的路径来创建文件。可以使用以下代码来解决这个问题:
import os
# 获取当前工作目录
current_path = os.getcwd()
# 拼接文件路径
file_path = os.path.join(current_path, "file.txt")
# 创建文件并写入数据
with open(file_path, "w") as f:
f.write("Hello World")
代码中,首先使用os
模块的getcwd
方法获取当前工作目录,然后使用os.path.join
方法拼接要创建的文件路径,最后使用open
方法创建文件并写入数据。这样就可以成功创建文件并写入数据了。