使用selenium模拟登陆豆瓣网对搜索功能抓取数据

首先安装

selenium可以直接可以用pip安装。

1
pip install selenium

接下来安装谷歌驱动,chromedriver的安装一定要与Chrome的版本一致。

安装地址如下:

1、http://chromedriver.storage.googleapis.com/index.html

2、https://npm.taobao.org/mirrors/chromedriver/

注:查看自己的谷歌浏览器版本信息:在浏览器中输入chrome://version/

 

 

 

下载之后解压,存放到python目录下,你的python环境安装目录如下:

 

 

 一切就绪后测试代码是否可以启动浏览器

1
2
3
4
from selenium import webdriver
 
browsers = webdriver.Chrome()
browsers.get('https://movie.douban.com/')

 下面上豆瓣网搜索功能代码:

复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
import json
from lxml import etree
from difflib import SequenceMatcher
import re

options = webdriver.ChromeOptions()
options.add_argument(
    'user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"'
)
prefs = {
    'profile.default_content_setting_values': {
        'images': 2
    }
}
options.add_experimental_option('prefs', prefs)  #不加载图片
options.add_argument('--headless')  # 浏览器不提供可视化页面
options.add_argument('--disable-gpu')#谷歌文档提到需要加上这个属性来规避bug

browser = webdriver.Chrome(chrome_options=options)

class DoubanCrawler():
    def get_cookies(self):
        browser.get('https://movie.douban.com/')
        browser.implicitly_wait(2)
        browser.find_element_by_xpath('/html/body/div/div/div[2]/p/a').click()
        browser.find_element_by_xpath('//*[@id="account"]/div[2]/div[2]/div/div[1]/div/div[1]/a[1]').click()
        WebDriverWait(browser,20).until(EC.presence_of_element_located((By.ID,'inp-query')))
        cookies_data = browser.get_cookies()
        with open('cookes.txt','w')as f:
            f.write(json.dumps(cookies_data))

    def set_cookies(self,movie_name):#模拟登陆进行搜索
        browser.get('https://www.douban.com/')
        with open('cookes.txt','r')as f:
            cookie_lists = json.loads(f.read())

        for cookie in cookie_lists:
                cookie_dict = {
                    'domain': '.douban.com',
                    'name': cookie.get('name'),
                    'value': cookie.get('value'),
                    "expires": cookie.get('expires'),
                    'path': '/',
                }
                browser.add_cookie(cookie_dict)
        browser.refresh()
        browser.find_element_by_xpath("//div[@class='bd']/div[@class='global-nav-items']/ul/li[3]/a").click()
        browser.switch_to_window(browser.window_handles[1])  #切换tab窗口
        browser.find_element_by_xpath("//input[@id='inp-query']").send_keys(movie_name)
        browser.find_element_by_xpath('//*[@id="db-nav-movie"]/div[1]/div/div[2]/form/fieldset/div[2]/input').click()
        if not '没有找到关于' in browser.page_source:
            HTML = etree.HTML(browser.page_source)
            title = HTML.xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div[1]/div[1]/div/div[1]/a/text()')[0].replace('\u200e','').split('(')[0].strip()
            titles =''.join(re.findall(r'[\u4e00-\u9fa5]',title))   #匹配中文
            detail_id = HTML.xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div[1]/div[1]/div/div[1]/a/@href')[0].split('/')[-2]
            reslut = self.similarity(movie_name,titles)
            browser.quit()  # 关闭浏览器
            if reslut >= 0.7:
                return titles,detail_id,reslut
            else:
                return False
        else:
            return False




    def similarity(self,a, b): #字符串对比
        return SequenceMatcher(None, a, b).ratio()#引用ratio方法,返回序列相似性的度量


if __name__ == '__main__':
    n = DoubanCrawler().set_cookies('小狗吉米走私事件')
    print(n)
复制代码

 

 

更多关于selenium的使用方法请移步:https://blog.csdn.net/qq_33961117/article/details/86616122

python之selenium设置浏览器为手机模式(开发者模式)https://www.cnblogs.com/FBGG/p/15984400.html
posted @   lvye001  阅读(201)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示