爬虫中的相关解析和遇到的问题

106 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

1. Xpath解析

  • 1.安装lxml模块
  • 2.pip install lxml (此处如果下载速度比较慢,可以通过查看之前的博客所写的方法)
  • 3.导入extree(from lxml import etree)
  • 4.tree = extree.XML()
  • 5.tree = extree.html()
  • 6.tree = extree.parse()
  • 然后通过tree即可进行相关的xpath操作

2. 正则表达式re模块

当我们需要调用的时候可以 通过pandas包进行直接调用

  • 1.需要导入的包是csv包,表示可以将相关信息存入csv表中
  • 2.需要导入的包是re包,用于正则表达式的书写
  • 3.需要导入额包是requests包,用于获取网页源代码

获取网页源码的代码是:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"
}
resp = requests.get(url=url,headers=headers)
print(resp.text)

需要注意的是:正则表达式的书写方式有很多,一定要注意最后文件的关闭,防止被IP禁止或者占用内存资源.

我们可以将我们爬取的内容存放入excel或者csv表中,方便之后进行数据分析.

f = open("data.csv", mode="w", encoding="utf-8", newline='')
csvlist = csv.writer(f)

3. Bs4使用

  • 1.通过pip install bs4将bs4包进行安装

  • 2.导入包from bs4 import BeautifulSoup

  • 3.把页面源代码交给BeautifulSoup进行处理, 生成bs对象 page = BeautifulSoup(resp.text, "html.parser") # 指定html解析器,如果不指定解析器不会报错,但是会爆红

  • 4.从bs对象中查找数据

    find(标签, 属性=值)

    find_all(标签, 属性=值)

  • 5.在指定属性的过程中,例如class和id等是python的关键字,所以直接使用python关键字会发现报错,有两种解决方式: 第一种是在关键字后加_可解决问题,例如:class_ table = page.find("table", class_="hq_table") 第二种是使用attrs{},例如: table = page.find("table", attrs={"class": "hq_table"})

4. 常见的问题

请求头中最常⻅的⼀些重要内容(爬⾍需要):

User-Agent : 请求载体的身份标识(⽤啥发送的请求)

Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)

cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)

响应头中⼀些重要的内容:

cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token) 各种神奇的莫名其妙的字符串( 防⽌各种攻击和反爬) 请求方式:

1.GET方式(显示提交)

2.POST方式(隐示提交,请求参数加密)

在正则表达式中,findall返回的是列表,在编写代码的过程中如果碰到有波浪线的情况可以加个r只有好处没有坏处.

lst = re.findall(r"\d+", "5点之前. 你要给我5000万")