爬虫整理

摘要

  • 1.response = requesets.get(url,headers=header)
  • 2.soup = BeautifulSoup(response.text,'html.parser')
  • 3.guoguo = soup.select('...')
  • 2.2 pattern = re.compile('...',re.S)
  • 3.2 guoguo = re.findall(pattern, response.text)

1.观察网址的翻页特征,以豆瓣电影为例

import requests
import time
from bs4 import BeautifulSoup

for i in range(10):
      offset = i * 10
      url = 'http://maoyan.com/board/4?offset='+str(offset)
      time.sleep(2)
      #暂停2s 

2.获取网址文本内容

def get_one_page(url):
    header={'user-agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'}
    response = requests.get(url,headers=header)
    if response.status_code == 200:
        return response.text
    return None

3.用正则表达式解析配对文本内容

def parse_one_page(html):
    pattern = re.compile(
        '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',
        re.S)
    items = re.findall(pattern, html)

查看:正则表达式字符含义
常用字符:

  • /s 空格
  • /d 数字
  • /w 字符

常用语法:

  • re.compile('...',re.S) #re.S表示可换行
  • re.findall(pattern, html) #匹配正则pattern和网址文本

3.2 用性质查找

s = request.session()  # 会话维持
response = s.get(url,headers=header)
soup = BeautifulSoup(response.text,'html.parser')

index = soup.find_all(attrs={'class':'board-index'}) #可支持模糊搜索
title = soup.find_all(attrs={'class':'name'})
time = soup.find_all(attrs={'class':'releasetime'})

for i in index:
     print(i.get_text())
   #即可得到各输出内容

3.3用selector或xpath查找

右键检查元素,复制选择器路径

response = requests.get(url,headers=header)
soup = BeautifulSoup(response.text,'html.parser')

post=soup.select('body > div.con > div.leftCon > div.item_con.pos_info > div.pos_base_info > span.pos_title')
address=soup.select('body > div.con > div.leftCon > div.item_con.pos_info > div.pos-area > span')
wage=soup.select('body > div.con > div.leftCon > div.item_con.pos_info > div.pos_base_info > span.pos_salary')

4 存储数据

  • 以字典形式存入txt文件
import json
#字典形式用json储存

def parse_one_page(html):
    pattern = re.compile(
        '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',
        re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield {
            'index': item[0],
            'image': item[1],
            'title': item[2].strip(),
            'actor': item[3].strip()[3:] if len(item[3]) > 3 else '',
            'time': item[4].strip()[5:] if len(item[4]) > 5 else '',
            'score': item[5].strip() + item[6].strip()
        }
def write_to_file(content):
    with open('result.txt','a',encoding='utf-8') as f: #新建txt,a表示写入的是字符
        f.write(json.dumps(content,ensure_ascii=False)+'\n') #开始写,写字典用json来格式化
        f.write('===========================================\n')
  • 以DataFrame形式存入
test = pd.DataFrame()
temp = pd.DataFrame()

for url in urls:
    links = get_url(url)
    time.sleep(2)   #得到所有的页
    for link in links:
        href = link.get('href') #取到每页中所有子链接的网址
        wb_data = requests.get(href,headers=header) #开始取每页中的内容
        soup = BeautifulSoup(wb_data.text,'lxml')
        
        post=soup.select('body > div.con > div.leftCon > div.item_con.pos_info > div.pos_base_info > span.pos_title')
        address=soup.select('body > div.con > div.leftCon > div.item_con.pos_info > div.pos-area > span')
        wage=soup.select('body > div.con > div.leftCon > div.item_con.pos_info > div.pos_base_info > span.pos_salary')
        requirement = soup.select('body > div.con > div.leftCon > div.item_con.pos_info > span')
        corp=soup.select('body > div.con > div.rightCon > div > div > div.comp_baseInfo_title > div.baseInfo_link > a')
                
        for i in range(len(post)):
            temp.loc[i,'职位'] = post[i].get_text()
            temp.loc[i,'地址'] = address[i].get_text()
            temp.loc[i,'工资'] = wage[i].get_text()
            temp.loc[i,'公司'] = corp[i].get_text()
            temp.loc[i,'要求'] = requirement[i].get_text()
        test = test.append(temp)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 爬虫概述 爬虫案例 案例1:爬取百度贴吧数据 分析:GET方式爬取数据抓包:设计:实现: 案例2:抓妹子图 分析:...
    Ji_uu阅读 1,801评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 12,113评论 0 99
  • 上次假设“世界上只剩两个男人郭德纲和周立波”,有粉丝说我什么审美。 不能说点帅哥吗。 我是觉得,帅哥经不起失望,最...
    刘浏阅读 5,127评论 1 9
  • 端坐于时光一角 以红尘为道场 将爱的种子洒遍在人世间的每一个角落 以阳光照耀 月光润泽 雨露滋养 与草木同生长...
    程雨露阅读 1,580评论 1 4

友情链接更多精彩内容