精华内容
下载资源
问答
  • 主要为大家详细介绍了Python网络爬虫实例,爬虫的定义、主要框架等基础概念,感兴趣的小伙伴们可以参考一下
  • Python网络爬虫实例:股票数据定向爬虫 一、功能描述 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 技术路线:requests-bs4-re 二、候选数据网站选择 候选网站: 新浪股票:...

    Python网络爬虫实例:股票数据定向爬虫

    一、功能描述

    目标:获取上交所和深交所所有股票的名称和交易信息

    输出:保存到文件中

    技术路线:requests-bs4-re

    二、候选数据网站选择

    候选网站:

    • 新浪股票:https://finance.sina.com.cn/stock/
    • 百度股票:https://gupiao.baidu.com/stock/
    • 东方财富网-http://quote.eastmoney.com/stocklist.html
    • 同花顺:http://q.10jqka.com.cn/#refCountId=db_509381c1_860
    • 老虎社区:https://www.laohu8.com/

    选取原则:股票信息存在于HTML页面中,非js代码生成。没有robots协议限制

    选取方法:浏览器F12 ,源代码查看等

    选取心态:不要纠结与某个网站,多找信息源尝试

    网站确定:

    • 获取股票列表:
      东方财富网:http://quote.eastmoney.com/stocklist.html

    • 获取个股信息:
      老虎社区:https://www.laohu8.com/

    三、程序的结构设计

    1. 从东方财富网获取股票列表
    2. 根据股票列表逐个到老虎社区股票获取个股信息
    3. 将结果存储到文件

    四、实例代码

    import requests
    from bs4 import BeautifulSoup
    import traceback
    import re
    
    def getHTMLText(url):
        try:
            r = requests.get(url)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ""
    
    def getStockList(lst, stockURL):
        html = getHTMLText(stockURL)
        soup = BeautifulSoup(html, 'html.parser') 
        a = soup.find_all('a')
        for i in a:
            try:
                href = i.attrs['href']
                lst.append(re.findall(r"\d{6}", href)[0])
            except:
                continue
        print(len(lst))
        
    def getStockInfo(lst,stockURL,fpath):
        for stock in lst:
            url = stockURL + stock
            html = getHTMLText(url)
            try:
                if html == "":
                    continue
                infoDict = {}
                soup = BeautifulSoup(html,'html.parser')
                stockName = soup.find_all('h1',attrs={'class':'name'})[0]
                name = stockName.text.split()[0]
                infoDict.update({'股票名称':name})
                
                stockInfo = soup.find('div',attrs={'class':'stock-detail'})
                keyList = stockInfo.find_all('dt')
                valueList = stockInfo.find_all('dd')
                for i in range(len(keyList)):
                    key = keyList[i].text
                    val = valueList[i].text
                    infoDict[key] = val
    
                with open(fpath,'a',encoding='utf-8') as f:
                    f.write(str(infoDict) + '\n' )
            except:
                traceback.print_exc()
                continue
            
    def main():
        stock_list_url = 'http://quote.eastmoney.com/stock_list.html'
        stock_info_url = 'https://www.laohu8.com/stock/a/'
        output_file = 'D:/BaiduStockInfo.txt'
        slist = []
        getStockList(slist,stock_list_url)
        getStockInfo(slist,stock_info_url,output_file)
    
    main()
    

    五、优化

    import requests
    from bs4 import BeautifulSoup
    import traceback
    import re
    
    def getHTMLText(url,code="utf-8"):#此处指定编码方式,优化了速度
        try:
            r = requests.get(url)
            r.raise_for_status()
            r.encoding = code
            return r.text
        except:
            return ""
    
    
    def getStockList(lst, stockURL):
        html = getHTMLText(stockURL,'GB2312')
        soup = BeautifulSoup(html, 'html.parser') 
        a = soup.find_all('a')
        for i in a:
            try:
                href = i.attrs['href']
                lst.append(re.findall(r"\d{6}", href)[0])
            except:
                continue
        print(len(lst))
    
        
    def getStockInfo(lst,stockURL,fpath):
        count = 0
        for stock in lst:
            url = stockURL + stock
            html = getHTMLText(url)
            try:
                if html == "":
                    continue
                infoDict = {}
                soup = BeautifulSoup(html,'html.parser')
                stockName = soup.find_all('h1',attrs={'class':'name'})[0]
                name = stockName.text.split()[0]
                infoDict.update({'股票名称':name})
    
                
                stockInfo = soup.find('div',attrs={'class':'stock-detail'})
                keyList = stockInfo.find_all('dt')
                valueList = stockInfo.find_all('dd')
                for i in range(len(keyList)):
                    key = keyList[i].text
                    val = valueList[i].text
                    infoDict[key] = val
    
                with open(fpath,'a',encoding='utf-8') as f:
                    f.write(str(infoDict) + '\n' )
                    count = count + 1
                    print('\r当前进度:{:.2f}%'.format(count*100/len(lst)),end="")#增加进度条,优化用户体验
            except:
                count = count + 1
                print('\r当前进度:{:.2f}%'.format(count*100/len(lst)),end="")
                continue
            
    def main():
        stock_list_url = 'http://quote.eastmoney.com/stock_list.html'
        stock_info_url = 'https://www.laohu8.com/stock/a/'
        output_file = 'D:/BaiduStockInfo.txt'
        slist = []
        getStockList(slist,stock_list_url)
        getStockInfo(slist,stock_info_url,output_file)
    
    main()
    

    在cmd中运行此文件,可看到进度的动态显示!
    这一篇使用requests库,下一篇使用scrapy框架爬取股票数据.

    参考中国大学MOOC网课程:Python网络爬虫与信息提取-嵩天

    展开全文
  • 第1章 网络爬虫概述 11.1 认识网络爬虫 11.1.1 网络爬虫的含义 11.1.2 网络爬虫的主要类型 21.1.3 ...41.2.2 Python中实现网页解析 51.2.3 Python爬虫框架 61.3 搭建开发环境 71.3.1 代码运行环境 7...

    第1章 网络爬虫概述 1

    1.1 认识网络爬虫 1

    1.1.1 网络爬虫的含义 1

    1.1.2 网络爬虫的主要类型 2

    1.1.3 简单网络爬虫的架构 3

    1.1.4 网络爬虫的应用场景 3

    1.2 Python网络爬虫技术概况 4

    1.2.1 Python中实现HTTP请求 4

    1.2.2 Python中实现网页解析 5

    1.2.3 Python爬虫框架 6

    1.3 搭建开发环境 7

    1.3.1 代码运行环境 7

    1.3.2 开发编辑器 8

    1.4 本章小结及要求 11

    第2章 爬虫基础 12

    2.1 认识HTTP请求 12

    2.1.1 HTTP请求的含义 12

    2.1.2 HTTP请求信息 12

    2.2 爬虫基础——Requests库入门 15

    2.2.1 Requests库的安装 15

    2.2.2 Requests库的请求方法 16

    2.2.3 Requests库的响应对象 17

    2.2.4 响应状态码 17

    2.2.5 定制请求头部 18

    2.2.6 重定向与超时 18

    2.2.7 传递URL参数 19

    2.3 爬虫基础——Urllib库基础 20

    2.3.1 Urllib 库简介 20

    2.3.2 发送GET请求 20

    2.3.3 模拟浏览器发送GET

    请求 21

    2.3.4 POST发送一个请求 22

    2.3.5 URL解析 23

    2.4 本章小结及要求 24

    第3章 网页解析基础 25

    3.1 网页解析概述 25

    3.1.1 常用网页解析工具 25

    3.1.2 HTML源码简介 25

    3.2 XPath语法基础 27

    3.2.1 Lxml库的安装 27

    3.2.2 XPath语法基础——

    通过路径查找元素 28

    3.2.3 通过属性查找元素 30

    3.2.4 提取属性值 31

    3.2.5 XPath的高级用法 31

    3.3 抓取百度首页实例 33

    3.4 Beautiful Soup库和正则表达式 37

    3.4.1 Beautiful Soup简介 38

    3.4.2 Beautiful Soup基本用法 39

    3.4.3 Beautiful Soup标准选择器 40

    3.4.4 正则表达式 41

    3.5 本章小结及要求 45

    第4章 基础爬虫实例 46

    4.1 Q房网爬虫实例 46

    4.1.1 网站页面分析 46

    4.1.2 编写Q房网二手房房源爬虫

    代码 47

    4.1.3 保存爬取到的信息 50

    4.2 多层页面的爬取 51

    4.2.1 爬取详情页面分析 51

    4.2.2 编写爬取详情页面的代码 52

    4.3 下载房源图片和实现多线程

    爬虫 55

    4.3.1 下载房源图片 55

    4.3.2 实现简单多线程爬虫 56

    4.4 本章小结及要求 59

    第5章 Requests模拟登录 60

    5.1 使用Cookies登录网站 60

    5.1.1 网站的保持登录机制 60

    5.1.2 登录豆瓣网站 61

    5.2 模拟登录网站 63

    5.2.1 豆瓣网站的登录分析 63

    5.2.2 Requests会话对象 66

    5.2.3 编写Requests登录豆瓣

    网站的代码 67

    5.3 验证码的处理 68

    5.3.1 带验证码的网站登录分析 68

    5.3.2 验证码的识别和处理 70

    5.3.3 编写带验证码的豆瓣网站

    登录代码 71

    5.4 本章小结及要求 73

    第6章 认识和应对反爬虫 74

    6.1 常用的网站反爬虫策略及应对

    措施 74

    6.1.1 常用的网站反爬虫策略 74

    6.1.2 应对网站反爬虫的措施 75

    6.2 使用IP代理的方法 76

    6.2.1 Requests中使用代理IP 76

    6.2.2 获取免费代理IP 77

    6.3 使用IP代理爬取微信文章 78

    6.3.1 分析微信文章的搜索页面

    及其URL的构造特点 78

    6.3.2 编写爬虫代码 80

    6.4 本章小结及要求 82

    第7章 动态网页的抓取 84

    7.1 动态网页及其爬取方法 84

    7.1.1 动态网页的含义 84

    7.1.2 动态网页的爬取办法 85

    7.2 动态网页的爬取技巧 86

    7.2.1 链家经纪人页面分析 86

    7.2.2 链家经纪人爬虫实现 88

    7.3 Selenium库的安装与使用 90

    7.3.1 Selenium库的安装 90

    7.3.2 chromedriver的安装和使用 91

    7.3.3 Selenium的简单使用 92

    7.4 爬取新浪微博网站 95

    7.4.1 新浪微博网站爬取分析 95

    7.4.2 新浪微博网站爬虫实现 95

    7.4.3 爬虫的简单去重 98

    7.4.4 使用Chrome浏览器的

    headless模式 100

    7.5 本章小结及要求 101

    第8章 动态网页与应对反爬虫

    综合实例 102

    8.1 拉勾网网站分析 102

    8.1.1 拉勾网网站页面初步分析 102

    8.1.2 解析json数据和招聘岗位

    详情页分析 105

    8.2 拉勾网爬虫实现 107

    8.2.1 拉勾网爬虫的初步实现 107

    8.2.2 拉勾网爬虫的进一步

    完善 109

    8.3 探索拉勾网反爬虫机制 110

    8.4 本章小结及要求 113

    第9章 Scrapy爬虫框架基础 114

    9.1 Scrapy爬虫框架简介与安装 114

    9.1.1 Scrapy爬虫框架简介 114

    9.1.2 Scrapy爬虫框架的安装 114

    9.2 Scrapy目录结构和简单爬虫

    实例 116

    9.2.1 Scrapy目录结构 116

    9.2.2 百度爬虫实现 119

    9.2.3 Scrapy选择器 120

    9.3 Scrapy命令行工具、选择器、

    数据容器 122

    9.3.1 Scrapy常用命令行工具 122

    9.3.2 Scrapy选择器高级应用 124

    9.3.3 Scrapy数据容器 125

    9.4 本章小结及要求 126

    第10章 BasicSpider类和

    图片下载 127

    10.1 BasicSpider类 127

    10.1.1 Scrapy的爬虫类和模板 127

    10.1.2 BasicSpider类简介 128

    10.2 爬取我爱我家二手房房源

    数据 129

    10.2.1 我爱我家网站分析 129

    10.2.2 我爱我家爬虫项目实现 131

    10.2.3 数据的快捷输出 133

    10.3 图片下载和翻页的另一种

    方法 134

    10.3.1 Scrapy图片下载简介 134

    10.3.2 我爱我家房源图片下载 134

    10.3.3 翻页的另一种方法 135

    10.4 本章小结及要求 137

    第11章 CrawlSpider类和Scrapy

    框架概览 138

    11.1 CrawlSpider类简介 138

    11.2 房天下二手房房源爬虫 139

    11.2.1 房天下网站分析 139

    11.2.2 房天下二手房房源爬虫

    实现 140

    11.3 Scrapy架构 143

    11.3.1 Scrapy架构概览 143

    11.3.2 Scrapy中的数据流 144

    11.4 本章小结及要求 145

    第12章 Scrapy应对反爬虫

    策略 146

    12.1 常用的反爬虫设置 146

    12.2 下载器中间件 148

    12.2.1 下载器中间件简介 148

    12.2.2 激活下载器中间件 149

    12.2.3 编写下载器中间件 150

    12.3 设置随机用户代理和IP代理 150

    12.3.1 设置随机用户代理 150

    12.3.2 设置随机IP代理 152

    12.4 本章小结及要求 153

    第13章 登录网站和提交数据 154

    13.1 Cookies登录网站的高级技巧 154

    13.1.1 Request对象 154

    13.1.2 利用Cookies登录网站的

    技巧 155

    13.2 使用FormRequest向网站提交

    数据 157

    13.2.1 FormRequest类 157

    13.2.2 爬取Q房网二手房房源 158

    13.3 Scrapy登录网站的高级技巧 159

    13.3.1 FormRequest.from_response()

    方法 159

    13.3.2 利用Scrapy登录网站的

    技巧 160

    13.4 本章小结及要求 161

    第14章 存储数据到数据库 162

    14.1 MongoDB的安装与使用 162

    14.1.1 Scrapy存储数据与

    MongoDB简介 162

    14.1.2 MongoDB的安装 162

    14.1.3 MongoDB的配置与启动 163

    14.1.4 MongoDB的可视化管理 164

    14.2 爬取链家经纪人成交数据 165

    14.2.1 链家移动页面分析 165

    14.2.2 定义Items、编写spider 168

    14.3 设置链家网爬虫pipeline 171

    14.3.1 在Python中操作

    MongoDB 171

    14.3.2 配置pipeline 174

    14.3.3 在settings中启用pipeline 175

    14.4 存储数据到MySQL 175

    14.4.1 使用pymysql操作MySQL

    数据库 175

    14.4.2 把链家经纪人成交数据存储

    到MySQL数据库 176

    14.5 本章小结及要求 177

    第15章 分布式爬虫与爬虫部署 178

    15.1 分布式爬虫原理与Redis的

    安装 178

    15.1.1 Scrapy分布式爬虫原理 178

    15.1.2 Redis的安装 179

    15.2 scrapy_redis实现分布式爬虫 181

    15.2.1 scrapy_redis库 181

    15.2.2 分布式爬虫的部署和存储 182

    15.3 使用Scrapyd部署爬虫 183

    15.3.1 Scrapyd简介和安装 183

    15.3.2 使用scrapyd-client部署

    爬虫 185

    15.4 Scrapy爬虫去重 187

    15.4.1 Scrapy去重方案 187

    15.4.2 Bloom Filter过滤 188

    15.5 本章小结及要求 189

    第16章 项目实战——知乎用户

    爬虫及数据分析 190

    16.1 知乎用户爬虫——知乎网站

    分析 190

    16.1.1 知乎网站初步分析 190

    16.1.2 知乎网站进一步分析 192

    16.2 知乎爬虫的实现 194

    16.2.1 编写知乎爬虫代码 194

    16.2.2 使用MongoDB和scrapy_redis

    搭建分布式爬虫 196

    16.3 爬虫数据分析 197

    16.3.1 爬虫数据分析工具 197

    16.3.2 知乎用户数据加载 199

    16.3.3 爬虫数据简单分析 200

    16.4 本章小结及要求 206

    展开全文
  • python网站爬虫实例.py

    2020-05-18 22:41:22
    python开发源代码,爬爬爬,想学的可以下载.利用python编写,爬取网站数据,做成excel表格分析
  • python 爬虫实例宋城路

    2017-11-07 16:40:13
    python 爬虫实例 python 爬虫实例 python 爬虫实例 python 爬虫实例 python 爬虫实例
  • Python简单爬虫实例记录

    千次阅读 2018-03-31 11:08:59
    Python简单爬虫实例记录主要流程分为:爬取、整理、存储1.其中用到几个包,包括requests 用于向网站发送请求,并获得网页代码BeautifulSoup4 用于处理获得的网页代码,提取有效信息pandas 用于存储信息 其中在to_...

    Python简单爬虫实例记录


    主要流程分为:

    爬取、整理、存储


    1.其中用到几个包,包括

    requests 用于向网站发送请求,并获得网页代码

    BeautifulSoup4 用于处理获得的网页代码,提取有效信息

    pandas 用于存储信息

      其中在to_excel(‘docname.xlsx’)时,可能去要另外的包 openpyxl

    import requests

    from bs4 import BeautifulSoup

    import re

    import json

    import pandas

    import excel

    import sqlite3

    # import openpyxl



    2.以爬取新浪网址中各个新闻的责任编辑为例子

    可以按照倒推的方式确定deffunctions

    1. 获取到了当条新闻下的网页网址后,如何获得责任编辑?

    def getComments(url):

        # url对应网址发送请求,获取到的网页内容存储在res

        res=requests.get(url)

        # res内容编码,编码的方式'utf-8'根据网页的charset而定

        res.encoding='utf-8'

        # 因为需要处理res,因此将文本存入soup

        # html.parser不清楚是干嘛的

        soup=BeautifulSoup(res.text,'html.parser')

        # 根据所需要的内容,通过BS4select选择,得到数组,用[0]取出元素

        # 因为是文本所以直接通过.text得到所需要的内容

        return soup.select('.show_author')[0].text

    # soup.select('.link')[0]中,若为id则带#

    #                             若为class则带.

    #                             其他的如ah1等则无要求

    #其中需要层层select并取[0]

    #有些有多元素,则需通过for遍历




    ii)  根据主页面如何获得各条新闻网页的网址

    某行文件是在json中发现,因此通过comments=requests.get(‘url’)

    jd=json.loads(comments.text.strip(‘var data=‘)) 

    jd=[‘result’][‘count’][‘total’]    ==>这里为字典中的字典,可以从网页检查元素的preview中查看

    ==>可转化为字典

      其中要恢复成字典,左右两头多出了什么就要通过strip()去除

      有些需要分左右侧分别删除则通过lstrip()rstrip(),leftright

    ==>for ent in ~:

              ent[‘url’]

    ***)   soup.select()到的所需元素在同一个类中,则可以使用contents[0]区分


    ***timestr间的转换

    from datetime import date time

    Str==>time        dt=datetime.strptime(timesource,’%Y%m%d’)

    time==>Str        dt.strftime(‘%Y-%m-%d’)


    ***)   list[]各元素连接

    ‘-‘.join(list) #list中的各元素以-方式连接

    ‘’.join([p.text.strip() for p in soup.select(‘#artibody p’)[:-1]])



    ***)   对于有多页的网址,则需要找到page对应部分改为{}

    然后通过format()进行替换


    news_total=[]

    for i in range(1,3):

        newsurl=url.format(i)

        newsary=parseListlink(newsurl)

        new_total.extend(newsary)


    3. 使用pandas存储数据,其中是DataFrame()功能函数


    df=pandas.DataFrame(list)

    print(df.head(20))  #显示前20条信息

    df.to_excel('news.xlsx') #转存为excel格式,名字为news.xlsx


    其中list的格式为


    for u in geturl(url):

        excel1 = [] # 循环开始清空数组

        result = {} # 循环开始清空字典

        try:

            # 每个条目在新字典赋值

            result['zeren']=getComments(u)

            result['id']=i

            i=i+1

        except:

            continue

        #每个条目形成数组

        excel1.append(result)

        #在列表中添加数组

        list.extend(excel1)


    4. 存储数据库


    df=pandas.DataFrame(list)

    print(df.head(20))  #显示前20条信息

    # df.to_excel('news.xlsx') #转存为excel格式,名字为news.xlsx


    with sqlite3.connect('news.sqlite') as db:

        # 存入news.sqlite文件中的news表格

        df.to_sql('news',con=db)

        # 读取/查询news表格并将数据赋值给df2

        df2=pandas.read_sql_query('SELECT * FROM news',con=db)


    展开全文
  • python3爬虫实例代码

    2018-03-27 14:46:25
    简单强大的Python,福利分享~代码实例。~~~~~~~~~~~~~
  • python简单爬虫实例

    2014-12-29 22:19:12
    自动爬取鼠绘上的最新话海贼王漫画 如果本地有最新话则退出程序
  • 2提取Facebook的API数据 3自动化登录Linkedin 爬在线商店Gap 爬宝马官网爬取Google真实的搜索表单 爬取依赖JavaScript的网站Facebook 爬取典型在线商店Gap 爬取拥有地图接口的宝马官网 1.爬Google搜索引擎# -...

    • 爬取Google真实的搜索表单
    • 爬取依赖JavaScript的网站Facebook
    • 爬取典型在线商店Gap
    • 爬取拥有地图接口的宝马官网
      #1.爬Google搜索引擎
    # -*- coding: utf-8 -*-
    
    import sys
    import urllib
    import urlparse
    import lxml.html
    from downloader import Downloader
    
    def search(keyword):
        D = Downloader()
        url = 'https://www.google.com/search?q=' + urllib.quote_plus(keyword)
        html = D(url)
        tree = lxml.html.fromstring(html)
        links = []
        for result in tree.cssselect('h3.r a'):
            link = result.get('href')
            qs = urlparse.urlparse(link).query
            links.extend(urlparse.parse_qs(qs).get('q', []))
        return links
    
    if __name__ == '__main__':
        try:
            keyword = sys.argv[1]
        except IndexError:
            keyword = 'test'
        print search(keyword)
    

    注意:提取Google搜索结果时注意爬取延时问题,否则下载速度过快会出现验证码处理。
    #2.爬Facebook和Linkein
    查看Packt出版本的Facebook页面源代码时,可以找到最开始的几篇日志,但后面的日志只有浏览器滚动时才会通过AJAX加载。

    2.1自动化登录Facebook

    这些AJAX的数据无法简化提取,虽然这些AJAX事件可以被卧逆向工程,但是不同类型的Facebook页面使用了不用的AJAX调用。所以下面用Selenium渲染实现自动化登录Facebook。

    # -*- coding: utf-8 -*-
    
    import sys
    from selenium import webdriver
    
    def facebook(username, password, url):
        driver = webdriver.Firefox()
        driver.get('https://www.facebook.com')
        driver.find_element_by_id('email').send_keys(username)
        driver.find_element_by_id('pass').send_keys(password)
        driver.find_element_by_id('login_form').submit()
        driver.implicitly_wait(30)
        # wait until the search box is available,
        # which means have succrssfully logged in
        search = driver.find_element_by_id('q')
        # now are logged in so can navigate to the page of interest
        driver.get(url)
        # add code to scrape data of interest here
        #driver.close()
        
    if __name__ == '__main__':
        try:
            username = sys.argv[1]
            password = sys.argv[2]
            url = sys.argv[3]
        except IndexError:
            print 'Usage: %s <username> <password> <url>' % sys.argv[0]
        else:
            facebook(username, password, url)
    

    ##2.2提取Facebook的API数据
    Facebook提供了一些API数据,如果允许访问这些数据,下面就提取Packt出版社页面的数据。

    # -*- coding: utf-8 -*-
    
    import sys
    import json
    import pprint
    from downloader import Downloader
    
    def graph(page_id):
        D = Downloader()
        html = D('http://graph.facebook.com/' + page_id)
        return json.loads(html)
    
    if __name__ == '__main__':
        try:
            page_id = sys.argv[1]
        except IndexError:
            page_id = 'PacktPub'
        pprint.pprint(graph(page_id))
    

    Facebook开发者文档:https://developers.facebook.com/docs/graph-api 这些API调用多数是设计给已授权的facebook用户交互的facebook应用的,要想提取比如用户日志等更加详细的信息,仍然需要爬虫。

    2.3自动化登录Linkedin

    # -*- coding: utf-8 -*-
    
    import sys
    from selenium import webdriver
    
    def search(username, password, keyword):
        driver = webdriver.Firefox()
        driver.get('https://www.linkedin.com/')
        driver.find_element_by_id('session_key-login').send_keys(username)
        driver.find_element_by_id('session_password-login').send_keys(password)
        driver.find_element_by_id('signin').click()
        driver.implicitly_wait(30)
        driver.find_element_by_id('main-search-box').send_keys(keyword)
        driver.find_element_by_class_name('search-button').click()
        driver.find_element_by_css_selector('ol#results li a').click()
        # Add code to scrape data of interest from LinkedIn page here
        #driver.close()
        
    if __name__ == '__main__':
        try:
            username = sys.argv[1]
            password = sys.argv[2]
            keyword = sys.argv[3]
        except IndexError:
            print 'Usage: %s <username> <password> <keyword>' % sys.argv[0]
        else:
            search(username, password, keyword)
    

    #3.爬在线商店Gap
    Gap拥有一个结构化良好的网站,通过Sitemap可以帮助网络爬虫定位到最新的内容。从http://www.gap.com/robots.txt 中可以发现网站地图Sitemap: http://www.gap.com/products/sitemap_index.html

    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <sitemap>
    <loc>http://www.gap.com/products/sitemap_1.xml</loc>
    <lastmod>2017-01-30</lastmod>
    </sitemap>
    <sitemap>
    <loc>http://www.gap.com/products/sitemap_2.xml</loc>
    <lastmod>2017-01-30</lastmod>
    </sitemap>
    </sitemapindex>
    

    如上网站地图册链接的内容仅仅是索引,其索引的网站地图才是数千种产品类目的链接,比如:http://www.gap.com/products/blue-long-sleeve-shirts-for-men.jsp 。由于这里有大量要爬取的内容,因此我们将使用第4篇开发的多线和爬虫,并支持一人可选的回调参数。

    # -*- coding: utf-8 -*-
    
    from lxml import etree
    from threaded_crawler import threaded_crawler
    
    def scrape_callback(url, html):
        if url.endswith('.xml'):
            # Parse the sitemap XML file
            tree = etree.fromstring(html)
            links = [e[0].text for e in tree]
            return links
        else:
            # Add scraping code here
            pass       
    
    def main():
        sitemap = 'http://www.gap.com/products/sitemap_index.xml'
        threaded_crawler(sitemap, scrape_callback=scrape_callback)
        
    if __name__ == '__main__':
        main() 
    

    该回调函数首先下载到的URL扩展名。如果扩展名是.xml,则用lxml的etree模块解析XML文件并从中提取链接。否则,认为这是一个类目URL(这例没有实现提取类目的功能)。
    #4.爬宝马官网
    宝马官方网站中有一个查询本地经销商的搜索工具,其网址为https://www.bmw.de/de/home.html?entryType=dlo
    该工具将地理位置作为输入参数,然后在地图上显示附近的经销商地点,比如输入BerlinLook For
    我们使用开发者工具会发现搜索触发了AJAX请求:
    https://c2b-services.bmw.com/c2b-localsearch/services/api/v3/clients/BMWDIGITAL_DLO/DE/pois?country=DE&category=BM&maxResults=99&language=en&lat=52.507537768880056&lng=13.425269635701511
    maxResults默认设为99,我们可以增大该值。AJAX请求提供了JSONP格式的数据,其中JSONP是指填充模式的JSON(JSON with padding)。这里的填充通常是指要调用的函数,而函数的参数则为纯JSON数据。本例调用的是callback函数,要想使用Pythonr的json模块解析该数据,首先需要将填充的部分截取掉。

    # -*- coding: utf-8 -*-
    
    import json
    import csv
    from downloader import Downloader
    
    def main():
        D = Downloader()
        url = 'https://c2b-services.bmw.com/c2b-localsearch/services/api/v3/clients/BMWDIGITAL_DLO/DE/pois?country=DE&category=BM&maxResults=%d&language=en&lat=52.507537768880056&lng=13.425269635701511'
        jsonp = D(url % 1000) ###callback({"status:{...}"})
        pure_json = jsonp[jsonp.index('(') + 1 : jsonp.rindex(')')]
        dealers = json.loads(pure_json) ###
        with open('bmw.csv', 'w') as fp:
            writer = csv.writer(fp)
            writer.writerow(['Name', 'Latitude', 'Longitude'])
            for dealer in dealers['data']['pois']:
                name = dealer['name'].encode('utf-8')
                lat, lng = dealer['lat'], dealer['lng']
                writer.writerow([name, lat, lng])
        
    if __name__ == '__main__':
        main() 
    
    >>> dealers.keys() #[u'status',u'count',u'data',...]
    >>> dealers['count'] #显示个数
    >>> dealers['data']['pois'][0] #第一个经销商数据
    

    Wu_Being 博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
    【Python爬虫系列】《【Python爬虫9】Python网络爬虫实例实战》http://blog.csdn.net/u014134180/article/details/55508272
    Python爬虫系列的GitHub代码文件https://github.com/1040003585/WebScrapingWithPython

    展开全文
  • python2.7爬虫实例详细介绍之爬取大众点评的数据

    万次阅读 热门讨论 2016-11-05 22:19:36
    本文主要介绍如何利用python进行网站数据的抓取工作。我看到过利用c++和java进行爬虫的代码,c++的代码很复杂,而且可读性、可理解性较低,不易上手,一般是那些高手用来写着玩加深对c++的理解的,这条路目前对我们...
  • python爬虫实例100例-10个python爬虫入门实例

    千次阅读 多人点赞 2020-10-29 14:47:18
    昨天带伙伴萌学习python爬虫,准备了几个简单的入门实例涉及主要知识点:web是如何交互的requests库的get、post函数的应用response对象的相关函数,属性python文件的打开,保存代码中给出了注释,并且可以直接运行哦...
  • 第1章 网络爬虫概述 11.1 认识网络爬虫 11.1.1 网络爬虫的含义 11.1.2 网络爬虫的主要类型 21.1.3 ...41.2.2 Python中实现网页解析 51.2.3 Python爬虫框架 61.3 搭建开发环境 71.3.1 代码运行环境 7...
  • 以上是网络爬虫的百度,下面开始介绍使用Python进行网络爬虫来获取数据。 用来获取新冠肺炎的实时数据。 使用的工具PyCharm 新建Python文件,命名为get_data 使用爬虫最常用的request模块 第一部分: 获取网页信息:...
  • 最近两天学习了一下python,并自己写了一个网络爬虫的例子。 python版本: 3.5 IDE : pycharm 5.0.4 要用到的包可以用pycharm下载: File->Default Settings->Default Project->Project Interpreter 选择python...
  • WechatSogou [1]- 微信公众号爬虫。基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典。DouBanSpider [2]- 豆瓣读书爬虫。可以爬下豆瓣读书标签...
  • python爬虫实例详解

    2020-09-20 09:18:23
    主要为大家详细介绍了python爬虫实例,包括爬虫技术架构,组成爬虫的关键模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python 网络爬虫实例

    千次阅读 2017-09-27 20:25:54
    自己用Python写了一个抓取百度贴吧里面的图片的小实例,代码如下: from urllib.request import urlopen from urllib.request import urlretrieve from urllib.error import HTTPError from bs4 import ...
  • python爬虫实例教程

    2018-03-01 11:43:51
    本书共8章,涵盖的内容有Python语言的基本语法、Python常用IDE的使用、Python第三方模块的导入使用、Python爬虫常用模块、Scrapy爬虫、Beautiful Soup爬虫、Mechanize模拟浏览器和Selenium模拟浏览器。
  • python爬虫实例

    2018-08-15 10:25:25
    网络爬虫python实例,利用selenium组件爬取网页元素, 也可以作为网页自动化测试学习脚本

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,807
精华内容 14,322
关键字:

python数据爬虫实例

python 订阅
爬虫 订阅