非常简易/简陋的爬虫框架 1.0

非常简易/简陋的爬虫框架 1.0

by chi

人生苦短请用python

之前一直想学python,但是学期里只是断断续续地了解了一些基础知识,看完就忘记惹。这几天接触了最基础的爬虫编写,另外也去了解了一下python,发现它除了Pythonic之外真的能做很多事情昂。

最简陋的这类爬虫编写原理和用到的知识还是比较少的,在此列出一个比较友好(我看得懂)的 note吧(算不上库emmm,覆盖的知识太少了),或许之后会慢慢完善,可能有错误,毕竟几天前一切为zero

另:anaconda个人使用体验一般,pycharm深得我心


极其简易的框架

'''
1.使用Requests下载数据的步骤
导入Requests库
输入url   url = '' 
使用get方法      r = requests.get(url,timeout=20)
打印返回文本   print(r.text)
抛出异常   print(r.raise_for_status()) 

2.爬取网页通用框架:
定义函数
设置超时
异常处理
调用函数
'''

#  一、使用requests获取数据
#导入requests 库
import requests  #当浏览器用get时;用post尚未遇到过
#输入url
url = '链接'

#定义函数
def getHTMLText(url):
    try:
        r = requests.get(url,timeout = 20)  # 使用get方法获取url,设置超时
        r.raise_for_status()  # http请求的返回状态,200表示连接成功
        r.encoding = r.apparent_encoding  #分析返回对象的编码方式 = 响应内容编码方式(备选编码方式)
        return r.text   # 返回对象的文本内容
    except:   # 异常处理
        return"产生异常"
        #或者 return r.raise_for_status()    显示异常状态码

#调用与封装
if __name__ == '__main__':
    url = "https://movie.douban.com/subject/1301168/comments"
    print(getHTMLText(url)) #调用函数  参照https://blog.csdn.net/yjk13703623757/article/details/77918633/

# 二、解析数据  BeautifulSoup   Xpath,Xpath比较友好
# BeautifulSoup  解析网页数据
from bs4 import BeautifulSoup
soup = BeautifulSoup(getHTMLText(url),'lxml')
pattern = soup.find_all('位置1','位置2')
for item in pattern:
    print(item.string)

#Xpath 解析网页数据
from lxml import etree
url = ''
r = request.get(url).text
s = etree.HTML(r)

#从浏览器复制第一条评论的Xpath
print(s.xpath('//*[@id="comments"]/ul/li[1]/div[2]/p/span/text()'))
#从浏览器复制第二条评论的Xpath
print(s.xpath('//*[@id="comments"]/ul/li[2]/div[2]/p/span/text()'))
#从浏览器复制第三条评论的Xpath
print(s.xpath('//*[@id=“comments”]/ul/li[3]/div[2]/p/span/text()'))

#掌握规律,删除li[]的括号,获取全部短评
print(s.xpath('//*[@id=“comments”]/ul/li/div[2]/p/span/text()'))

#手写Xpath获取全部短评
print(s.xpath('//div[@class="comment"]/p/span/text()'))


# 三、保存数据 open  pandas
#open 函数
'''
r只读。若不存在文件会报错。
w只写。若不存在文件会自动新建。
a附加到文件末尾。
rb, wb, ab操作二进制
r+,w+,a+读写模式打开
'''
#url = 'https://book.douban.com/subject/1084336/comments/'
#r = requests.get(url).text
#s = etree.HTML(r)

file =s.xpath('//*[@id="comments"]/ul/li/div[2]/p/span/text()')
with open('pinglun.txt','w',encoding='utf-8') as f:   #使用with open()新建对象f
    for i in file:
        print(i)
        f.write(i)  #写入数据,文件保存在当前工作目录

#可以使用以下方法得到当前工作目录或者修改当前工作目录
import os
os.getcwd()  # 得到当前工作目录
os.chdir()  # 修改当前工作目录,括号中传入工作目录的路径


#用pandas将其转化成csv文件
import pandas
comments = []
for item in pattern:
    comments.append(item.string)
df = pandas.DataFrame(comments)
df.to_csv('名称.csv',encoding='utf-8-sig')

#或者
import pandas as pd
df = pd.DataFrame(file)
df.to_excel('pinglun.xlsx')


# 四、关于反爬
#request headers 请求头  分析network   抓包   用无头浏览器

#  五、自动化
from selenium import webdriver #导入包
driver = webdriver.Chrome()  #打开Chrome浏览器
driver.get('http://www.baidu.com')  #输入url,打开百度首页

# selenium 简单使用
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()   #打开Chrome浏览器
url = 'http://www.baidu.com'  #网址可变
driver.get(url)

elem = driver.find_element_by_xpath('//*[@id = "kw"]')  # 运用xpath 方法,查找输入框  (//*[@id="kw"])
elem.send_keys('关键字',Keys.ENTER)  # 输入关键字,Keys.enter 模拟点击回车
print(driver.page_source)  # 显示源代码

个人感觉对工具/库的使用和了解很重要,遇到问题还是得多利用help/度娘/CSDN/GitHub,要么写Bug要么面向GitHub编程哈哈哈


对于python的学习也不知道重点要放在哪里,目前才刚刚走到奥林匹斯山的脚下(昂可能根本还没到)。暂时列几个现在想得起来的list(虽然也不一定会完成233)

一知半解的知识有:

for 循环
遍历
面向过程 VS 面向对象
还有好多emmmm动物书和廖老师的东西还没看完

比较重要/好用的库要了解&学习的还有:

pandas(series dataframe) + numpy [数据分析]
matplotlib [可视化]
tushare [当你没有wind的时候 QAQ]

爬虫方面入了个门,待学习的内容如下:

python Scrapy 框架
分布式框架
网页传输相关知识

相辅相成&比较有趣的:

数据库 MySQL等
R数据处理
OCR等

……


python总体来说还是蛮好上手的,但想较好地使用它确实需要很多其他方面的知识。跟它相见确实很晚了,希望能更多了解它吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值