【爬虫常用模板案例演示】——05全栈开发——如桃花来

目录索引

  • ==明确需求:==
  • ==基本套路代码:==
    • 四引:
    • 一表:
    • 三函:
      • *1. def get_data():*
      • 2.def parse_data():
      • 3.def save_data():
  • ==一main:==
  • ==案例演示:==

此次,我们针对租房网站进行相关信息的爬取,并使用excel来进行保存
首先:要先区别网站是异步加载还是同步加载!这关乎到你取数据的位置。
其次:不是json格式是没法使用jsonpath模块的,所以我们使用beautifulsoup模块来进行抓包。

明确需求:

目标:

  • 标题: headline
  • 钱: money
  • 图片: pic
  • 标题链接: head_link
  • 详情信息: detail

基本套路代码:

首先我们把任务用函数进行拆解,分为引入四个模块、三个基本函数和一个工作表的创建。四引三函一表一main

四引:

import requests
import re#不一定会用到,绝大多数情况用不到
from bs4 import BeautifulSoup
from openpyxl import workbook

一表:

这里采用的是excel的格式进行保存,需要提前下载第三方模块:openpyxl

#1.导包,这里要利用from导入
from openpyxl import workbook
#2.实例化一个excel对象
wb = workbook.Workbook()#第二个W是大写
#3.激活当前表,这里active后面不用加括号
wt = wb.active
#4. 设置表头,以列表形式传参,每一项为一行
wt.append([],[]...)
#5. 运行并保存,后面是后缀名
wt.save("命名.xlsx")
  • 后续对表的操作是对wt的操作,因为wt才激活了表。而wb仅用于创建一个对象和保存表。wt是worktake的缩写,直译为工作操作,方便记忆。
  • 对整个表的操作,如:创建excel对象、保存表是用wb
  • 对表数据的操作是用wt

三函:

1. def get_data():

该函数专门负责发起请求

def get_data(url,headers_message):
	#发起请求
	response = requests.get(url,headers=headers_message)
	html_data = response.text
	return html_data#别忘了要返回出去

2.def parse_data():

该函数专门用于处理数据,是最为重要的。利用正则表达式、BeautifulSoup、jsonpath来匹配

def parse_data(html_data):
	#处理数据
	soup =  BeautifulSoup(html_data,"lxml")
	.....#处理方式
	save_data()

注意: 这里的末尾要引用下一个函数,用于保存数据。

3.def save_data():

该函数主要负责保存函数

def save_data():
	#保存数据
	wt_list = []#你要保存的各个数据写这里
	wt.append(wt_list)
	wb.save("命名.xlsx")

一main:

if __name__ == '__main__':

案例演示:

"""
目标:
    标题: headline
    钱: money
    标题链接: head_link
    详情信息: detail
    带s结尾一般表示列表,不带s一般表示单项
"""


import requests,re
from bs4 import BeautifulSoup
from openpyxl import workbook

wb = workbook.Workbook()#实例化一个excel对象
wt = wb.active#激活表
wt.append(["标题","钱","标题链接","详情信息"])

def get_data(url,headers_message):
    #获取数据
    response = requests.get(url,headers=headers_message)
    html_data = response.text
    return html_data

def parse_data(html_data):
    #解析数据
    soup = BeautifulSoup(html_data,"lxml")
    headlines = soup.select(".content__list--item--title ")
    moneys = soup.select(".content__list--item--main span.content__list--item-price")
    head_links = soup.select(".content__list--item--aside")
    details = soup.select(".content__list--item--main p.content__list--item--des")
    for headline,money,head_link,detail in zip(headlines,moneys,head_links,details):
        #标题
        h = headline.get_text().strip()
        #价格
        m = money.get_text().strip()
        #标题链接
        he_li = head_link["href"].strip()
        #详情信息
        d = detail.get_text().strip()
        #很多空格在斜杠里面,所以需要二次修改
        de = re.sub("/|\s","",d)
        save_data(h,m,he_li,de)

def save_data(h,m,he_li,de):
    #保存数据
    wt_list = [h,m,he_li,de]
    wt.append(wt_list)
    wb.save("链家租房情况.xlsx")

if __name__ == '__main__':
    url = "https://cs.lianjia.com/zufang/"
    headers_message = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 112.0.0.0Safari / 537.36Edg / 112.0.1722.64"
        #referer是翻页来源,有的话最好写上
    }
    html_data = get_data(url,headers_message)#获取网页数据
    parse_data(html_data)

一定要找出共同的规律,可能比较隐蔽但一定存在,分类讨论的方法不可取,因为数据匹配会错乱。

加上翻页:

"""
目标:
    标题: headline
    钱: money
    标题链接: head_link
    详情信息: detail
    带s结尾一般表示列表,不带s一般表示单项
"""


import requests,re
from bs4 import BeautifulSoup
from openpyxl import workbook

wb = workbook.Workbook()#实例化一个excel对象
wt = wb.active#激活表
wt.append(["标题","钱","标题链接","详情信息"])

def get_data(url,headers_message):
    #获取数据
    response = requests.get(url,headers=headers_message)
    html_data = response.text
    return html_data

def parse_data(html_data):
    #解析数据
    soup = BeautifulSoup(html_data,"lxml")
    headlines = soup.select(".content__list--item--title ")
    moneys = soup.select(".content__list--item--main span.content__list--item-price")
    head_links = soup.select(".content__list--item--aside")
    details = soup.select(".content__list--item--main p.content__list--item--des")
    for headline,money,head_link,detail in zip(headlines,moneys,head_links,details):
        #标题
        h = headline.get_text().strip()
        #价格
        m = money.get_text().strip()
        #标题链接
        he_li = head_link["href"].strip()
        #详情信息
        d = detail.get_text().strip()
        #很多空格在斜杠里面,所以需要二次修改
        de = re.sub("/|\s","",d)
        save_data(h,m,he_li,de)

def save_data(h,m,he_li,de):
    #保存数据
    wt_list = [h,m,he_li,de]
    wt.append(wt_list)
    wb.save("链家租房情况.xlsx")


if __name__ == '__main__':
    tp = ThreadPool(10)
    for i in range(1,100):
        print(f"正在爬取第{i}页的内容")
        url = f"https://cs.lianjia.com/zufang/pg{i}"
        headers_message = {
            "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 112.0.0.0Safari / 537.36Edg / 112.0.1722.64"
            #referer是翻页来源,有的话最好写上,在首页不显示,去后面几页找
        }
        html_data = get_data(url,headers_message)#获取网页数据
        parse_data(html_data)
#翻页的参数规律要自己找






你可能感兴趣的:(爬虫,excel,python)