Python 爬虫训练

一、基本爬虫三段式

import requests
response = requests.get('https://baidu.com')
print(response.text)


即可打印来自baidu的前端代码

二、爬虫的数据清洗

1.xpath

from lxml import etree
url = 'https://baidu.com'
response = requests.get(url)
#将源代码转化成网页结构
html = etree.HTML(response.text)
#在通过xpath来选择数据
data_info=html.xpath('/html/body/div[2]/div[3]/div/div[2]/div[4]/div[1]/div[1]/a/p[1]/span[1]')
print(data_info)

2.正则表达式(.*?)

import re
data = {'fdasfagagawe'}
a = re.findall('[a-z]',data,re.S)
print(a)

3.BeautifulSoup+CSS选择器

1.四大类型:

  1. navigableString 文本类型

  2. comment 注释

  3. BeautifulSoup

  4. 文档数 –子节点

    soup.head.children# 迭代器 也是一个对象

    from bs4 import BeautifulSoup
    import requests
    import json
    
    url = 'https://www.baidu.com'
    response = requests.get(url)
    response.encoding = 'utf8'
    soup = BeautifulSoup(response.text,'lxml')
    print(soup.head.children)#打印的是一个对象
    #要想打印出来必须迭代出来,也就是一条一条输出
    for child in soup.head.children:
        print(child)
    #将他的子孙节点都迭代出来
    for child in soup.descendants:
        print(child)
    #父节点 .parents 可迭代当前标签的所有父节点
    for parent in soup.p.parents:
        print(parent)
    #兄弟节点 .next_sibling 获取下一个兄弟 .prev_sibling 获取上一个兄弟
    #前后节点 .next_element .previous_element
    #可以加s

2.css选择器

div.class#id 多层就空格

soup.find('div.hl-main span')#跟select_one一样,只一次
soup.find_all('a')#找出所有a标签
soup.select('div.hl-main span')#等同find_all