首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day130-day132requests+selenium&线程池&scrapy安装

day130-day132requests+selenium&线程池&scrapy安装

原创
作者头像
少年包青菜
修改2020-05-06 17:59:54
5870
修改2020-05-06 17:59:54
举报
文章被收录于专栏:Python 学习Python 学习

1.requests简单爬虫

1.1依赖第三方工具

# pip install requests
# pip install lxml

1.2lxml的xpath解析

from lxml import etree

# 获取页面文本
web_response = requests.get(web_url, web_headers)
web_response.encoding = 'utf8'
web_text = web_response.text
# 生成 etree 对象
web_tree = etree.HTML(web_text)
# etree 对象进项 xpath 解析,返回一个列表
free_tags = web_tree.xpath('//div[@id="container"]/div/a')

1.3注意点,xpath 解析,返回一个列表

[0] # 取到某一个属性值

# [0],主要不要混乱
free_tags = web_tree.xpath('//div[@id="container"]/div/a/@href')[0]

./ # xpath 表达式定位之后再定位

test_fa_ele = web_tree.xpath('//div[@id="xxx"]/div')

# 基于 test_fa_ele 之后再定位到下面的 a 标签下的 href 属性值
test_son_ele = test_ele.xpath('./a/@href')

/ 和 // # 获取标签下一段文本以 和 全部文本

# 仅仅获取 span 标签下的文本
test_son_ele = test_ele.xpath('./span/text()')
# 只要是在该 div 标签下的文本,全部获取,包含 div 下的子标签的文本也会获取过来
test_son_ele = test_ele.xpath('./span//text()')

| # xpath 解析接受多个 xpath 表达式

test_ele = web_tree.xpath('//div[@id="xxx"]/div' | '//div[@id="yyy"]/div')

解决乱码的万能处理方法

# 现在解析出来的部分文字是乱码的状态
test_sstring = test_ele.xpath('./span/text()')

# 先编码再转码
test_sstring .encode('ISO-8859-1').decode('utf-8')

1.4 requests 的 session 携带cookie做全局会话交互

session = requests.Session()

# 本次会话的所有 cookie 保存在 session 对象里面
# get()、post() 的使用方式与 requests 是一样的
session.get()...
session.post.()..

1.5多线程的使用

import requests
from lxml import etree
from pprint import pprint
from multiprocessing.dummy import Pool

web_host = 'http://sc.chinaz.com/'
web_url = 'http://sc.chinaz.com/jianli/free.html'
web_headers = {
    'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/75.0'
}

# 请求到免费简历页面
web_response = requests.get(web_url, web_headers)
web_response.encoding = 'utf8'
web_text = web_response.text
web_tree = etree.HTML(web_text)

# 每一个free 标签
free_tags = web_tree.xpath('//div[@id="container"]/div/a')

free_list = []

for free_jianli in free_tags:
    free_list.append({free_jianli.xpath('./img/@alt')[0]: free_jianli.xpath('./@href')[0]})

pprint(free_list)

"""
free_list = 
[
    {'家具招聘导购员简历表格': 'http://sc.chinaz.com/jianli/200503474310.htm'},
    {'求职简历临床医学封面': 'http://sc.chinaz.com/jianli/200503107801.htm'},
    {'药剂科中药房个人简历': 'http://sc.chinaz.com/jianli/200502326660.htm'},
    {'幼师表格简历模板免费下载': 'http://sc.chinaz.com/jianli/200502443741.htm'},
    ...
    ...
}
"""


# 每一个线程都执行该函数
def down_load_source(source_dict):
    name, source_url = [item for item in source_dict.items()][0]
    data = requests.get(source_url, web_headers).content
    # 这一步返回的每一个字典都将加入列表
    return {name: data}


# 将结果保存
def save_data(data_dict):
    name, bytes_data = [item for item in data_dict.items()][0]
    with open('jianli/{}.rar'.format(name), 'wb') as ff:
        ff.write(bytes_data)
        print(name + '下载完毕')


# 起 5 个进程
pool = Pool(5)

# 所有结果返回这个列表
data_list = pool.map(down_load_source, free_list)

# 下载数据
pool.map(save_data, data_list)

pool.close()
pool.join()

2.selenium的使用

pip install seslnium

2.1谷歌浏览器无浏览器状态执行

from selenium.webdriver.chrome.options import Options
from selenium import wendriver

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

#谷歌无头浏览器,脚本正常执行,没有浏览器显示
bro = webdriver.Chrome(chrome_options=chrome_options)

2.2谷歌各个版本对应驱动

2.3驱动的下载地址

http://npm.taobao.org/mirrors/chromedriver/

2.4 PhantomJS 使用无头浏览器,不像谷歌浏览器需要设置Options

bro = webdriver.PhantomJS(executable_path=r'C:\Users\Administrator\Desktop\爬虫+数据\day04\phantomjs-2.1.1-windows\bin\phantomjs.exe')

2.5 PhantomJS 驱动下载地址

https://phantomjs.org/

3.安装scrapy

3.1 pip3 install wheel

#  pip3 install wheel

3.2 下载 twisted

# 地址
# https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

# cmd cd 到该下载包的目录下,执行安装

3.3 pip install pywin32

# pip install pywin32#

3.4 pip install scrapy

# pip install scrapy-

4.scrapy命令

4.1创建一个爬虫项目

scrapy startproject xxx    (项目名称)

4.2创建一个爬虫文件

scrapy genspider xxx   www.xxx.com (爬虫文件名,起始域名,可更换)

4.3执行一个爬虫文件

scrapy crawl xxx  --nolog      # 在无日志的状态下执行,不加默认带显示日志

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.requests简单爬虫
    • 1.1依赖第三方工具
      • 1.2lxml的xpath解析
        • 1.3注意点,xpath 解析,返回一个列表
          • 1.4 requests 的 session 携带cookie做全局会话交互
            • 1.5多线程的使用
            • 2.selenium的使用
              • 2.1谷歌浏览器无浏览器状态执行
                • 2.2谷歌各个版本对应驱动
                  • 2.3驱动的下载地址
                    • 2.4 PhantomJS 使用无头浏览器,不像谷歌浏览器需要设置Options
                      • 2.5 PhantomJS 驱动下载地址
                      • 3.安装scrapy
                        • 3.1 pip3 install wheel
                          • 3.2 下载 twisted
                            • 3.3 pip install pywin32
                              • 3.4 pip install scrapy
                              • 4.scrapy命令
                                • 4.1创建一个爬虫项目
                                  • 4.2创建一个爬虫文件
                                    • 4.3执行一个爬虫文件
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档