Python写网络爬虫之:爬取火车站项目中遇到的问题和知识总结

1. 如何实现模糊匹配

  • html.xpath(contains(@标签属性,"字符串"))

如下图所示,在 tr 标签的 id 中包含了车次的信息,所以,如果我想得到所有与车次信息有关的 tr 标签,我就可以用如下代码进行模糊匹配
在这里插入图片描述

train_numbers = ['Z49','G8588','K193','G8594']
for train_number in train_numbers:
    info = html.xpath('//tr[contains(@id,"%s")]//text()' % train_number)

2.如何修改 List 中的值

如果想要批量修改 列表 中的值,使用 for 循环简单的遍历每一个项是做不到的,例如:

str = ['dag ', '  hfgha', 'dga dgfag', 'laoimngh']
for i in str:
    i = 'heheh'
print(str)

在这里插入图片描述

但是,如果使用 for 循环按照 index 的方式来遍历,则可以实现,如下


str = ['dag ', '  hfgha', 'dga dgfag', 'laoimngh']
for i in range(len(str)):
    str[i] = 'hehe'
print(str)

在这里插入图片描述

3. 如何批量将 List 中所有项目的空格去掉

  • 第一种方法:还是使用 for i in range(len(str)) 的方法进行遍历,但是千万要记得,执行 replace() 函数之后,要把值再赋给 str[i]
str = ['dag ', '  hfgha', 'dga dgfag', 'laoimngh']
for i in range(len(str)):
    str[i] = str[i].replace(' ','')
print(str)

在这里插入图片描述

  • 第二种方法:使用 lamba 隐式函数的方法来将整个列表的每一项进行相同的操作
str = ['dag ', '  hfgha', 'dga dgfag', 'laoimngh']

str = list(map(lambda x:x.replace(' ',''),str))
print(str)

在这里插入图片描述

注意:map 得到之后,是一个可以迭代的对象,要把它用 list 函数再转化成列表,才可以进行打印和后续的列表操作

  • 第三种方法:strip 操作

str = [' dg ', ' hfg ha ', '  dgad gfag  ', 'laoimngh  ']
str = list(map(lambda x:x.lstrip(),str))

str2 = [' dg ', ' hfg ha ', '  dgad gfag  ', 'laoimngh  ']
str2 = list(map(lambda x:x.rstrip(),str2))

str3 = [' dg ', ' hfg ha ', '  dgad gfag  ', 'laoimngh  ']
str3 = list(map(lambda x:x.strip(),str3))

print(str)
print(str2)
print(str3)

在这里插入图片描述

4. 如何批量将 List 中所有的项目都变成相同的长度,不够的地方用指定的符号补齐

  • str.ljust(最终长度,填补的字符)
str = ['dag', ' hfgha', 'dgadgfag', 'laoimngh']

str = list(map(lambda x:x.ljust(10,'*'),str))
print(str)

5. 连续使用占位符 % 的时候,后面一定要接 “元组” 不可以是列表

在这里插入图片描述所以,要先转换成 “元组” ,按照如下代码:

lst = ['1','2','3','4']
lst = tuple(lst)
x = '%s,%s,%s,%s'%lst
print(x)

在这里插入图片描述

6. 如何根据已有的数据 print 出来规则的表格

  • 使用 prettytable 中的 PrettyTable 类来创建规则表格
  • 使用这种方式创建的 表格 可以直接转化成字符串 str,或者写入文件
from prettytable import PrettyTable
tab = PrettyTable()

header = ["车次", "出发站", "到达站", "出发时间", "到达时间"]
infos = {
'G8546':['G8546', '沙坪坝', '成都东', '10:02', '11:37'],
'G1832':['G1832', '重庆西', '成都东', '10:16', '11:48'],
'C6014':['C6014', '重庆西', '成都南', '10:31', '12:18'],
'G1710':['G1710', '重庆西', '成都东', '10:49', '12:23']
}

tab.header = True           #默认为true
tab.field_names = header
for key in infos:
    value = infos[key]
    tab.add_row(value)
print(tab)

tab_str = str(tab)
with open('tab.txt','w',encoding='utf-8') as f:
    f.write(tab_str)

在这里插入图片描述

7. 如何删除字典中的元素

  • diction.clear 删除字典全部内容
  • diction.pop(‘key’) 删除‘key’所代表的键值对
  • diction.popitem() 随机返回并删除一个键值对
  • del diciton[‘key’] 删除选中的 key 的键值对内容

8. remove、pop 、append、insert 等对列表操作的方法,不需要返回

这里的 remove 需要的参数是 value,而 pop 需要的参数是 index,这点需要注意

lst = ['1','2','3']
lst.remove('3')
print(lst)
lst.append('4')
print(lst)
lst.pop(0)
print(lst)
lst.insert(2,'11')
print(lst)
lst.insert(6,'80')    # 插入的位置超出索引,在最后一个位置插入
print(lst)

在这里插入图片描述

针对整个列表 list 的操作,例如 remove、append、 pop 不需要返回,不需要 lst = lst.remove(),只有在针对列表中单个元素进行操作的时候,比如 lst[i].replace(" “,”")的时候,才需要返回 lst[i] = lst[i].replace(" “,”")

9. 扩展和拼接列表

  • 方法一:lst1.extend(lst2)
lst = ['1','2','3']
lst2 = ['7','8','9','20']
lst.extend(lst2)
print(lst)


在这里插入图片描述

同样的,这也是对列表的操作,所以不需要返回,不需要 lst = lst.extend() 如果这样操作的话,会返回 None

  • 方法二:lst = lst + lst2
lst = ['1','2','3']
lst2 = ['7','8','9','20']
lst = lst + lst2
print(lst)

在这里插入图片描述

  • 方法三:array.flatten() 将多为的数组降维到一维
 array, 多维数组变成一维数组,flatten()函数用法:
flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。
flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用。
a.flatten():a是个数组,a.flatten()就是把a降到一维,默认是按行的方向降 。
这种方法多用于复杂算法方面,在此只做了解,按照此方法,我们可以先将列表转换成数组,降维后再tolist()

10. 判断列表是否为空

  • 方法一:len(lst)
if len(lst):
	pass
else:
	pass

方法二:

if lst:
	pass
else:
	pass

11. 使用 html 中的文本来匹配

content = html.xpath('//div[@id="名称"]//a[text()="文本"]')

例如下面展示一下,如何定位到百度的 “学术” 按钮,并点击
在这里插入图片描述

from selenium import webdriver
from lxml import etree

driver = webdriver.Chrome(executable_path= r'C:\Users\dell\Anaconda3\Scripts\chromedriver.exe')
driver.get('http://www.baidu.com/')
page = driver.page_source
html = etree.HTML(page)
search_button = driver.find_element_by_xpath('//a[text()="学术"]').click()

同样的方式,还可以点击 “贴吧”,“地图” 等等按键

12. python + selenium 下拉框、选项框 select 用法

https://www.cnblogs.com/dwdw/p/9998647.html

13. driver 实现自动文本填充

  • driver.send_keys()
driver = webdriver.Chrome(executable_path= r'C:\Users\dell\Anaconda3\Scripts\chromedriver.exe')
driver.get('http://www.baidu.com/')
input_box = driver.find_element_by_xpath('//input[@id="kw"]')
input_box.send_keys("woshishei")

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值