在利用爬虫爬取页面HTML信息得时候有的当你运用request方法爬取时爬下来得HTML信息和网站信息不相符,这也导致以后得爬去无法进行,这也是反扒机制之一,解决办法时利用代码进行模拟网页点击,来爬去相应得信息。

注:以下代码以今日头条网站为例

具体代码如下:

import requests
from lxml import etree
import os
#模拟浏览器行为
from selenium import webdriver
from mysqldb import ConnectMysql
import pymysql
class Gevent_spider(object):
def get_html(self,url):
#根据网址为所获得的HTML文件命名
if url == 'https://www.toutiao.com/ch/news_image/':
file_name = 'toutiao.html'
else:
file_name = 'inner_pear.html'
#定义一个新的变量接收匹配后的值
html_content = ''
#使用os模块来判断文件是否存在 如果不存在直接写文件
if not os.path.exists(file_name):
 
#利用selenium方法来模拟人点击浏览器行为获取正式html
browser = webdriver.Chrome()
#get获取页面信息
browser.get(url)
#解码并进行赋值
html = browser.page_source.encode("utf-8").decode()
#设置等待时间 等待模拟器操作完成
time.sleep(5)
 
#将爬去的HTML写入文件
with open('./'+file_name,'w',encoding='utf-8') as f:
f.write(html)
#关闭模拟行为
browser.quit()
#对空变量进行赋值
html_content = html
#如果文件存在直接读取文件中的信息,
else:
with open('./'+ file_name,encoding='utf-8') as f:
contents = f.read()
#对空变量重新复制
html_content = contents
#将爬取的信息传入解析模板方法
self.xpath_html(html_content)
#定义解析方法
def xpath_html(self,html):
#利用LXML方法解析HTML
html = etree.HTML(html)
#匹配图片标签 因为图片标签隐藏在不同的层次下 所以匹配两个
img_list = html.xpath("//div[@class='image-wrap middle left']/img/@src")
img_list1 = html.xpath("//div[@class='image-wrap large']/img/@src")
#遍历其中一个图片列表 将其添加到另一个 已保证图片列表得完整性
for item in img_list1:
img_list.append(item)
#下载图片
for item in img_list:
#定义下载到得地址
path = "E:/头条/"
if os.path.exists(path):
 
filepath = requests.get('http://'+item.replace('//',''))
filepath1 = filepath.content
 
picname = item.split("/")[-1]
with open(path + "/" + picname+'.jpg',"wb") as f:
f.write(filepath1)
#匹配内页网址和标题
url_list = html.xpath("//ul[@class='imgList']/li/a/@href")
title_list= html.xpath("//p[@class='des']/text()")
 
#手动添加url 便利后添加到列表
url_list1 = []
for item in url_list:
item = 'https://www.toutiao.com' + item
url_list1.append(item)
#判断标题 去除空格
title_list1 = []
for item in title_list:
if item == " ":
pass
else:
title_list1.append(item)
# print(url_list1,"+++++++++",img_list,"+++++++++",title_list1)
# print(len(url_list1),"+++++++++",len(img_list),"+++++++++",len(title_list1))
#将匹配后得数据传到入库方法中
self.insert_db(url_list1,title_list1,img_list)
 
#定义写成入库方法
def insert_db(self,url_list1,title_list1,img_list):
#建立数据库连接
conn = pymysql.connect(host='localhost',user='root',password='mysql',database='mymac',charset='utf8')
#定义游标对象
cursor = conn.cursor()
#入库操作
for item in range(len(img_list)):
cursor.execute(" insert into `toutiao_spider` values ('%s','%s','%s') " % (url_list1[item],title_list1[item],img_list[item]))
conn.commit()
cursor.close()
conn.close()
 
#爬取内页
# def get_inner_data(self,list):
# for item in list:
# # print(item)
# browser = webdriver.Chrome()
# browser.get(item)
# html = browser.page_source.encode("utf-8").decode()
# time.sleep(5)
# browser.quit()
# html = etree.HTML(html)
# title = html.xpath("//div[@class='info-box-inner']/h2/text()")
# print(title)
#端点测试
# exit(-1)
#程序入口
if __name__ == "__main__":
#实例化对象
gevent_spider = Gevent_spider()
#调用方法并传相应参数
gevent_spider.get_html('https://www.toutiao.com/ch/news_image/')

mysqldb.py 文件具体代码:

#导包
import pymysql
#定义数据库公共类
class ConnectMysql(object):
#定义方法连接mysql
def connect_mysql(self):
#建立连接对象
conn = pymysql.connect(host='localhost',user='root',password='mysql',database='mymac',charset='utf8')
return conn

爬虫之selenium模拟点击的更多相关文章

  1. python爬虫:使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  2. Python使用selenium模拟点击(一)

    本文适合有点Python基础阅读,(没基础的话,相对的比较蒙蔽,争取能让小白能一步一步跟上来) 2019-03-05 14:53:05 前几天由于需要到一个网站进行签到~~听说Python能够模拟请求 ...

  3. Python使用selenium模拟点击(二)

    本篇文章是接着第一篇文章讲的 具体可看第一篇:https://www.cnblogs.com/whatarey/p/10477754.html 要实现功能>搜索完毕,自动点击 这个功能做的停操蛋 ...

  4. Python使用selenium模拟点击,进入下一页(三)

    嗯,昨天呢,我们已经实现了自动输入百度然后搜索Cgrain,然后点击按钮,进入我的页面,在这里呢,有个问题 ActionChains(seleniumGoo).move_by_offset(-480, ...

  5. python爬虫——用selenium爬取京东商品信息

    1.先附上效果图(我偷懒只爬了4页)  2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...

  6. 爬虫之动态HTML处理(Selenium与PhantomJS )动态页面模拟点击

    动态页面模拟点击 #!/usr/bin/env python # -*- coding:utf-8 -*- # python的测试模块 import unittest from selenium im ...

  7. selenium + firefox/chrome/phantomjs登陆之模拟点击

    登陆之模拟点击 工具:python/java + selenium + firefox/chrome/phantomjs (1)windows开发环境搭建 默认已经安装好了firefox 安装pip ...

  8. 使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据

    记录一次快速实现的python爬虫,想要抓取中财网数据引擎的新三板板块下面所有股票的公司档案,网址为http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995. ...

  9. 七、Selenium与phantomJS----------动态页面模拟点击、网站模拟登录

    每天一个小实例1(动态页面模拟点击,并爬取你想搜索的职位信息) from selenium import webdriver from bs4 import BeautifulSoup # 调用环境变 ...

随机推荐

  1. LVS + nginx实现高性能精准负载均衡

  2. Apktool(3)——Apktool的使用

    一.apktool的作用 安卓应用apk文件不仅仅是包含有resource和编译的java代码的zip文件,如果你尝试用解压工具(如好压)解压后,你将会获得classes.dex和resource.a ...

  3. mysql之系统默认数据库

    相关内容: 系统默认数据库information_schema,performance_schema,mysql,test  的意义 首发时间:2018-02-23 17:10 安装mysql完成后, ...

  4. Android Thread 官方说明

    Thread官方说明 https://developer.android.google.cn/reference/java/lang/Thread Thread是程序中执行的线程.Java虚拟机允许应 ...

  5. Python自定义异常及抛出异常

    """ 自定义异常 """ class MyException(Exception): # 继承异常类 def __init__(self, ...

  6. Linux 最小化安装后IP的配置(手动获取静态IP地址)

    一.图形化界面配置(假设为电脑A) 如果你的Linux安装有图形化界面,那么通过以下方式来配置: 我这里是有两块网卡,第一个网卡在上篇中已经通过DHCP来配置了:Linux 最小化安装后IP的配置(D ...

  7. Oracle数据库忘记用户名密码的解决方案

    1.windows+r输入sqlplus 2.依次输入: sys/manager as sysdba #创建新用户 SQL> create user c##username(自己的用户名) id ...

  8. ASP.NET -- WebForm -- 给图片添加水印标记

    ASP.NET -- WebForm: 给图片添加水印标记 ASP.NET:使用 WebForm(C#) 制作一个简单的为图片添加水印的页面. 1. Test2.aspx文件 <%@ Page ...

  9. zookeeper-02 部署

    1. 主机规划 主机名称 外网IP[外部访问] 内网IP 操作系统 备注 安装软件 docker01 10.0.0.11 172.16.1.11 CentOS 7.2 zookeeper-3.4.5[ ...

  10. 网络协议 反扒机制 fidder 抓包工具

    协议 http 协议: client 端 server 端交互的 一种形式 请求头信息: User-Agent: 情求载体的身份标识 connection: 'close' 连接状态 请求成功后 断开 ...