爬虫整理

摘要

  • 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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

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