2021.03.31 代理的使用

本文介绍了如何使用代理IP抓取豆瓣电影Top250的排名、电影名称和评分,并结合Selenium进行网页滚动和数据解析,展示了Python爬虫中的代理管理和浏览器自动化技术应用。

2021.03.31

代理的使用

import requests
import time
from re import findall
import csv
from selenium.webdriver import Chrome
from selenium import webdriver


# 获取代理ip
def get_ips():
    url = 'http://piping.mogumiao.com/proxy/api/get_ip_bs?appKey=6226c130427f487385ad7b5235bc603c&count=2&expiryDate=0&format=2&newLine=3'
    response = requests.get(url)
    if response.text[0] == '{':
        return None
    result = [x for x in response.text.split('\n') if x]
    return result


def save_data(datas, file):
    with open(file, 'w', encoding='utf-8', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['排名', '电影名称', '评分'])
        writer.writerows(datas)


def get_douban1():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
    }

    # 不断获取代理ip只带取到ip位置
    while True:
        ips = get_ips()
        if ips:
            break
        time.sleep(11)

    print(ips)
    # 添加代理
    proxies = {'http': ips[0], 'https': ips[1]}
    response = requests.get('https://movie.douban.com/top250', headers=headers, proxies=proxies)
    if response.status_code == 200:
        re_str = r'(?s)<li>\s*<div class="item">.+?alt="(.+?)".+?"v:average">(.+?)</span>.+?</li>'
        result = findall(re_str, response.text)
        new_result = [[index+1, *result[index]] for index in range(len(result))]
        save_data(new_result, '豆瓣电影.csv')
    else:
        print('获取数据失败')


def get_douban2():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
    }
    start = 0
    while True:
        url = f'https://movie.douban.com/top250?start={start}'
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            start += 25
        if start == 275:
            break

selenium设置代理

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
import requests


# 获取代理ip
def get_ips():
    url = 'http://piping.mogumiao.com/proxy/api/get_ip_bs?appKey=6226c130427f487385ad7b5235bc603c&count=2&expiryDate=0&format=2&newLine=3'
    response = requests.get(url)
    if response.text[0] == '{':
        return None
    result = [x for x in response.text.split('\n') if x]
    return result


ips = get_ips()
if ips:
    options = ChromeOptions()
    # 添加代理
    # option.add_argument('--proxy-server=http://代理ip:端口')
    options.add_argument(f'--proxy-server=http://{ips[0]}')
    b = Chrome(options=options)
    b.get('https://movie.douban.com/top250')
else:
    print('获取ip失败!')

selenium控制页面滚动

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time

b = Chrome()
b.get('https://www.jd.com/')
search = b.find_element_by_css_selector('#key')
search.send_keys('手机')
search.send_keys(Keys.ENTER)
time.sleep(1)
# 一步到位,滚动到底部
# b.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 一点一点的滚动: 500 -> 修改成每次需要滚动的距离,单位是像素;  1000 -> 每次滚动的时间间隔,单位是毫秒
b.execute_script("""
            height = 500
            t = setInterval(function(){
                if (height > document.body.scrollHeight){
                    clearInterval(t)
                }
                window.scrollTo(0, height)
                height += 500
            }, 1000)
""")

bs4数据解析

from bs4 import BeautifulSoup

# BeautifulSoup是基于css选择器的解析库

# 1.准备数据(一般是通过requests或者selenium爬取到的)
with open('data.html', encoding='utf-8') as f:
    content = f.read()

# 2.创建BeautifulSoup解析器对象
# BeautifulSoup(解析对象, 解析器类型)
# 解析对象 - 一般是html格式字符串(一般是通过requests或者selenium爬取到的)
# 解析器类型 - lxml(最常用)、html.parser、xml、html5lib
soup = BeautifulSoup(content, 'lxml')

# 3.获取标签 - 通过css选择器
# 解析器对象.select(css选择器)  -  在整个页面中按照css选择器查找指定标签
# 标签对象.select(css选择器)   -   在当前标签中按照css选择器查找指定标签
# result = soup.select('p')
# print(result)

# result = soup.select('#f2')
# print(result)

# result = soup.select('div>p')
# print(result)

# 嵌套写法: 标签1.标签2.标签3....   ->  获取标签1中第一个标签2中的第一个标签3...
# div = soup.select('div')[0]
# print(div.p)

# ol = soup.select('#o1')[0]
# print(ol)
#
# print(ol.li)
# print(ol.select('li'))


# lis = soup.select('#o1>li')
# print(lis)

# 4.按照指定属性值查找标签
# 获取href属性值是'https://www.jd.com'的标签
result = soup.find_all(attrs={'href': 'https://www.jd.com'})
print(result)

# 获取tag属性是'hot'的所有标签
result = soup.find_all(attrs={'tag': 'hot'})
print(result)

# 获取tag属性是'hot'并且height属性是'100'的所有标签
result = soup.find_all(attrs={'tag': 'hot', 'height': '100'})
print(result)

# 5.获取内容和属性
# 标签.string  - 获取双标签的文字内容(注意:被获取的标签中不能有子标签,否则结果是None)
# 标签.contents - 获取双标签的内容(包括文字内容和子标签)
b1 = soup.select('#f1')[0]
print(b1.string)    # 我是font1

b2 = soup.select('#f2')[0]
print('===:', b2.string)   # ===: None

print(b1.contents)   # ['我是font1']
print(b2.contents, b2.contents[-1].string)   # ['我是font2 ', <a href="#">abc</a>]  abc

print(b1.get_text())    # 我是font1
print(b2.get_text())    # 我是font2 abc

# 6.获取标签属性
# 标签对象.attrs[属性名]
b3 = soup.body.div.a
print(b3.attrs['href'])    # https://www.baidu.com

b4 = soup.find_all(attrs={'title': 't百度'})[0]
print(b4.attrs['src'], b4.attrs['title'])    # https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png t百度
题目1:长沙市财政收入影响因素分析(限3人) [问题描述] 本项目旨在通过研究,发现影响长沙市目前以及未来财源建设的因素,并对其进行深入分析,提出对长沙市地方财源优化的具体建议,供政府决策参考,同时为其他经济发展较快的城市提供借鉴。 [据抽取] 年份 地区生产总值亿元) 第一产业增加值(亿元) 第二产业增加值(亿元) 第三产业增加值(亿元) 常住人口(万人) 社会消费品零售总额(亿元) 城镇消费品零售额(亿元) 乡村消费品零售额(亿元) 固定资产投资增速 工业增加值增长速度 进出口总额(亿美元) 进口额(亿美元) 出口额(亿美元) 农林牧渔业增加值(亿元) 全年接待国内外旅游者(万人) 旅游总收入 2011年 5619.33 243.38 3151.68 2224.27 709.07 2125.91 2035.97 89.94 26.1 20.4 243.38 6013.6 543.5 2012年 6399.91 272.31 3592.52 2535.08 714.66 2454.71 2354.44 100.27 20.3 15.7 272.31 7989.18 741.13 2013年 7153.13 291.15 3946.97 2915.01 722.14 2801.97 2714.08 87.89 20.1 13.2 291.2 9485.36 958 2014年 7824.81 318.04 4245.68 3261.09 731.15 3162.07 3020.65 141.42 18.3 11.4 772.52 234.04 538.48 318.04 10487.1 1143.62 2015年 8510.13 341.78 4478.2 3690.15 743.18 3690.59 3457.38 233.21 17.1 8.8 805.8 268.22 537.58 348.31 11721.31 1351.5 2016年 9323.7 370.95 4513.23 4439.52 764.52 4117.4 3787.31 330.09 13.9 7.5 726.71 240.96 485.74 378.43 12450 1534.83 2017年 10535.51 379.45 4998.26 5157.8 791.81 4547.68 4133.32 414.36 13.1 8.1 938.02 350.13 587.89 388.43 13802.26 1770.06 2018年 11003.41 318.73 4660.19 6024.49 815.47 4765.04 4240.18 524.86 11.5 7.2 1283.34 460.19 823.15 337.21 14973.46 1808.05 2019年 11574.22 359.69 4439.32 6775.21 839.45 5247.03 4540.86 706.17 10.1 9 2002.03 605.6 1396.43 380.17 16832.61 2028.97 2020年 12142.52 423.46 4739.27 6979.79 1004.79 4469.76 3968.01 501.76 6.2 4.9 2350.46 801.74 1548.72 445.71 15194.31 1661.32 2021年 13270.7 425.56 5251.3 7593.85 1023.93 5111.57 4538.99 572.58 8.2 6.9 2780.28 802.82 1977.46 452.49 11479.3 1290.2 2022年 13966.11 451.3 5589.58 7925.24 1042.06 5235.56 4697.78 537.78 5.1 7.1 3313.9 851.4 2462.5 481.75 11994.42 1316.87 2023年 14517.55 451.89 5365.53 8514.55 1051.31 5561.67 4968.56 593.11 -6.8 5.4 2811.51 914.7 1896.81 485.63 19453.33 2193.05 [基本要求] 分析和识别影响长沙市财政收入的关键属性并预测2024年和2025年的财政收入
05-27
题目1:长沙市财政收入影响因素分析(限3人) [问题描述] 本项目旨在通过研究,发现影响长沙市目前以及未来财源建设的因素,并对其进行深入分析,提出对长沙市地方财源优化的具体建议,供政府决策参考,同时为其他经济发展较快的城市提供借鉴。 [据抽取] 年份,地区生产总值亿元),第一产业增加值(亿元),第二产业增加值(亿元),第三产业增加值(亿元),常住人口(万人),社会消费品零售总额(亿元),城镇消费品零售额(亿元),乡村消费品零售额(亿元),固定资产投资增速,工业增加值增长速度,进出口总额(亿美元),进口额(亿美元),出口额(亿美元),农林牧渔业增加值(亿元),全年接待国内外旅游者(万人),旅游总收入 2011年,5619.33,243.38,3151.68,2224.27,709.07,2125.91,2035.97,89.94,26.1,20.4,,,,243.38,6013.6,543.5 2012年,6399.91,272.31,3592.52,2535.08,714.66,2454.71,2354.44,100.27,20.3,15.7,,,,272.31,7989.18,741.13 2013年,7153.13,291.15,3946.97,2915.01,722.14,2801.97,2714.08,87.89,20.1,13.2,,,,291.2,9485.36,958 2014年,7824.81,318.04,4245.68,3261.09,731.15,3162.07,3020.65,141.42,18.3,11.4,772.52,234.04,538.48,318.04,10487.1,1143.62 2015年,8510.13,341.78,4478.2,3690.15,743.18,3690.59,3457.38,233.21,17.1,8.8,805.8,268.22,537.58,348.31,11721.31,1351.5 2016年,9323.7,370.95,4513.23,4439.52,764.52,4117.4,3787.31,330.09,13.9,7.5,726.71,240.96,485.74,378.43,12450,1534.83 2017年,10535.51,379.45,4998.26,5157.8,791.81,4547.68,4133.32,414.36,13.1,8.1,938.02,350.13,587.89,388.43,13802.26,1770.06 2018年,11003.41,318.73,4660.19,6024.49,815.47,4765.04,4240.18,524.86,11.5,7.2,1283.34,460.19,823.15,337.21,14973.46,1808.05 2019年,11574.22,359.69,4439.32,6775.21,839.45,5247.03,4540.86,706.17,10.1,9,2002.03,605.6,1396.43,380.17,16832.61,2028.97 2020年,12142.52,423.46,4739.27,6979.79,1004.79,4469.76,3968.01,501.76,6.2,4.9,2350.46,801.74,1548.72,445.71,15194.31,1661.32 2021年,13270.7,425.56,5251.3,7593.85,1023.93,5111.57,4538.99,572.58,8.2,6.9,2780.28,802.82,1977.46,452.49,11479.3,1290.2 2022年,13966.11,451.3,5589.58,7925.24,1042.06,5235.56,4697.78,537.78,5.1,7.1,3313.9,851.4,2462.5,481.75,11994.42,1316.87 2023年,14517.55,451.89,5365.53,8514.55,1051.31,5561.67,4968.56,593.11,-6.8,5.4,2811.51,914.7,1896.81,485.63,19453.33,2193.05 [基本要求] 分析和识别影响长沙市财政收入的关键属性并预测2024年和2025年的财政收入
05-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值