|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
说明:
由于最近在忙着学校内的事情,所以并没有时间为大家添加更加细致的图片分析(就是具体的对网页的分析过程),请见谅,等有时间就会补上
这些案例,在写这条分享时测验过,可以成功,但是不保证能百分百成功(特别时自动签到的,因为只能实验一次,但是这次是成功了的,所以不敢打包票)
案列一:自动登录🐟c网站并签到
代码如下(写了算是比较清除的解释):
- # -*- coding:utf-8 -*-
- # Author: 自学小白菜
- '''
- 说明:
- 需要的环境:
- Chrome浏览器(谷歌浏览器)和chromedriver
- 第三方模块:selenium
- '''
- from selenium import webdriver
- import time
- #安装chromedriver的路劲
- path = r'D:\CHROM\chrome\chromedriver.exe'
- def sign_in(driver):
- #转到签到页面
- sign_url = driver.find_element_by_xpath('//li[@id="mn_Nac60"]/a').get_attribute('href') #获取’签到‘按钮的href属性
- driver.get(sign_url)
- time.sleep(2)
- # print(sign_url)
- #开始签到
- sign_button_tag = driver.find_element_by_id('JD_sign')
- sign_button_tag.click()
- print('签到成功')
- time.sleep(2)
- def login(driver):
- url = 'https://fishc.com.cn/forum.php'
- driver.get(url)
- #测试是否能够返回正确html
- # print(driver.page_source)
- # #获取输入的tag和登录的按钮
- username_tag = driver.find_element_by_id('ls_username')
- password_tag = driver.find_element_by_id('ls_password')
- button_tag = driver.find_element_by_xpath('//button[@type="submit"]')
- #输入用户名和密码
- username = input('请输入用户名:')
- password = input('请输入密码:')
- #向输入框输入
- username_tag.send_keys(username)
- password_tag.send_keys(password)
- #确认登录
- button_tag.click()
- time.sleep(2)
- sign_in(driver)
- #测试用的,保存截图,证明登陆成功
- # time.sleep(5)
- # driver.save_screenshot('fishc.jpg')
- def main():
- driver = webdriver.Chrome(executable_path=path)
- login(driver)
- if __name__ == '__main__':
- main()
复制代码
案例二:使用requests爬取一个壁纸网站
代码如下:
- # -*- coding:utf-8 -*-
- # Author: 自学小白菜
- import requests
- from lxml import etree
- import time
- from urllib import request
- '''
- 所需库:
- lxml
- requests
- '''
- BASE_PATH='http://pic.netbian.com'
- def parse_page(url):
- #标准的头部信息(我发现这个网站反爬虫做的并不是很厉害,好像不需要headers都可以爬)
- headers = {
- 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
- }
- response = requests.get(url,headers=headers)
- #这里这个网站采取的gbk方式编码(可以在该网页处右击查看源码,搜索charset,里面就有它的编码方式)
- text = response.content.decode('gbk')
- #这里使用了xpath的解析方式,有兴趣的可以使用bs4或者正则
- html = etree.HTML(text)
- #获取图片的src属性,由于src只有部分,差了http://pic.netbian.com这一部分,所以后面会加上
- image_list = html.xpath('//img/@src')
- #删除无用图片,因为该网站的图片,有几张是没有用的,所以就删除了
- image_list.pop(-1)
- image_list.pop(-1)
- #获取图片标题
- title_list = html.xpath('//img/@alt')
- #删除一些不需要的标题,同图片一样,也是有一些不要的标题信息
- title_list.pop(0)
- title_list.pop(0)
- title_list.pop(0)
- title_list.pop(0)
- title_list.pop(-1)
- title_list.pop(-1)
- #测试是否正确
- # print(len(image_list),len(title_list))
-
- #zip是内置函数
- for value in zip(title_list,image_list):
- title,image = value
- image = BASE_PATH+image
- #urllib的request库中有一个专门下载图片等的函数,十分简便,就是urlretrieve,第一个参数是url,第二个是参数是存放的地址,这里我在其当前py文件夹下创建了images文件夹
- request.urlretrieve(image,'images/'+title+'.jpg')
- def main():
- page = int(input('请输入需要爬取多少页:'))
- #因为第一页的url和第二页以后的url不同,所以单独处理
- urls = []
- nums = 0
- for i in range(1,page+1):
- if i == 1:
- url = 'http://pic.netbian.com/index.html'
- else:
- url = 'http://pic.netbian.com/index_{page_num}.html'.format(page_num=i)
- urls.append(url)
- parse_page(url) #分析网页的函数
- time.sleep(2)
- if __name__ == '__main__':
- main()
复制代码
案例三:登陆豆瓣并爬取生化危机(可指定)影评
- # -*- coding:utf-8 -*-
- # Author: 自学小白菜
- import requests
- from lxml import etree
- def parse_page(session,url):
- #设置头部信息
- headers = {
- 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
- 'Referer':'https://search.douban.com/movie/subject_search?search_text=shenghuaweiji+&cat=1002'
- }
- #获取response响应
- response = session.get(url,headers=headers)
- text = response.content.decode('utf-8')
- #测试用的
- # print(text)
- #下面使用xpath进行解析
- html = etree.HTML(text)
- review_list = html.xpath('//div[@class="main review-item"]')
- for review_tag in review_list:
- name_list = review_tag.xpath('.//header[@class="main-hd"]//a[@class="name"]/text()')
- content_list = review_tag.xpath('.//div[@class="main-bd"]//div[@class="short-content"]/text()')
- for content in content_list:
- print(content)
- def get_comments(session):
- #豆瓣影评的url分析,这里爬取的是生化危机,大家可以自己修改url,就可以爬取其他电影了
- target_url = 'https://movie.douban.com/subject/1306809/reviews?start={page}'
- nums = int(input('请输入需要爬取多少页的影评:'))
- for i in range(0,nums):
- url = target_url.format(page=i*20)
- parse_page(session,url) #分析函数
- def login():
- '''
- 登录豆瓣
- :return: return session
- '''
- #获取session对象
- session = requests.Session()
- login_url = 'https://accounts.douban.com/j/mobile/login/basic'
- #设置头部信息
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
- 'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony'
- }
- #输入信息
- username = input('请输入用户名:')
- password = input('请输入密码:')
- #设置data属性
- data = {
- 'name':username,
- 'password':password,
- 'remember':'false'
- }
- #尝试登陆
- try:
- response = session.post(login_url,headers=headers,data=data)
- text = response.content.decode('utf-8')
- print(text)
- except Exception as e:
- print('登录失败,原因是',e)
- #返回session对象
- return session
- def main():
- session = login()
- get_comments(session)
- if __name__ == '__main__':
- main()
复制代码 |
|