首页 > 编程语言 >python 的爬虫技巧是什么?

python 的爬虫技巧是什么?

时间:2023-02-06 11:34:03浏览次数:27  
标签:请求 python price 爬虫 爬取 Python 数据 技巧

以前写毕设是关于网络爬虫这一块的。大学期间做的项目都是关于Java应用程序开发这一块的, 这次不想再写那些烂大街的管理系统了,不如试试别的。正逢导师给出参考题目,于是选了其中一个关于做搜索平台的。其实当下关于写爬虫的框架都不少,最初的时候爬虫最多使用Python写,后来渐渐的由于Java优秀的特性,后来也有了用Java实现的优秀框架。这里前期也没学过Python,所以选择了Python来写(是的,没学过,所以用它写,没毛病)。这次就把这些天来体会较深的一些地方记下来。

在刚开始看了近一个星期的Python语法和实际有关爬虫的一些论文和实现方案,以及一些操作视频,整个过程不算顺利,但是也算是自研道路上的进阶了,紧接着就开搞了。现在项目写了一半多了吧,其中有些问题都开始忘了。

问题一:如何提取目标数据

这一点算是比较基础的问题。其实只要只要学过网页相关的知识或者没接触过也可以很快上手。

首先要清楚要写的爬虫的目的是要从网络上获取数据,怎么获取?这就是跟平时打开浏览器浏览网页时是一回事,用户不管是在点击一个链接还是点击功能按钮后浏览器向服务器发出一个请求,最后将请求到的相关数据返回给客户端,浏览器获取到后展示出请求到的内容。

同样今天要用程序去实现,不过就是将人换成了程序,由程序去发请求,最后获取服务器返回的数据,这就是爬虫所做的事。在这个过程中,关键就是观察在常规浏览器中展示的网页时什么样的结构。也就是说通过请求可得到与网页结构是一致的所有数据。But,这些都是静态写在网页上的数据。直观来说就是查看源代码内容 = 请求得到的内容。

问题二:请求被禁

这个问题纠结了较长时间,最初以为可以通过设置请求头的方式,告诉服务器发请求的确实是浏览器来解决。但总觉得之前都可以找到特定请求就得到数据,这次应该也可以,不如找找别的请求有没有同样数据的加载,或者可以找找别的界面应该也是可以找到的。最后都试过,主要项目一些业务逻辑的问题,所以还是选择用试试这种添加请求头的方式,果然请求到了。

获得商品价格

def getPrice_fromTB(c_id):
url =TB_DETAIL_PRICE.format(c_id)
headers['Referer'] = headers['Referer'].format(c_id)
web_data = requests.get(url, headers=headers)
web_data.encoding = web_data.apparent_encoding
soup = BeautifulSoup(web_data.text, 'lxml').text
price_list = re.findall('\"price\":\"(.*?)\",', soup)
price = float(price_list[-1])
# print(price)
return price

这里因为最后获取到的json数据格式错误,只能通过正则表达式提取出数据。正常来说是可以通过Python的字符串转json的方法实现,但是前提是字符串的格式要正确。

问题三:大规模爬取数据

其实爬取数据并不困难,问题是如何爬取大规模数据。这里可以借用多线程,也可以采用优秀的异步框架tornado,然后要知道的是一个代理频繁访问在很多网站都是会被禁的,所以势必要先去获取一些代理,随便爬取100个可用的代理基本上就可以完成几十万条数据每小时的任务。

(注:爬取网页一些公开或不违反网站协议的一些数据作数据分析基本是没什么问题的,但切忌利用爬虫程序非法获取一些重要数据或资料并作为商业用途。有关法律法规可参看相关文件。)

标签:请求,python,price,爬虫,爬取,Python,数据,技巧
From: https://blog.51cto.com/u_13488918/6038797

相关文章

  • python中的lambda函数用法
    python中的lambda函数用法 例1:传入多个参数的lambda函数defsum(x,y):returnx+y用lambda来实现: p=lambdax,y:x+yprint(p(4,6))例2:传入一个参......
  • 浅谈Python中的包
    浅谈Python中的包Package的定义(你以为的)你在很多的地方都能看到关于package的定义:在Python中在当前目录下有__init__.py文件的目录即为一个package。嗯,包括pytho......
  • Python并发执行的简易实现:多进程、多线程、协程
    多进程importloggingimporttimefrommultiprocessingimportPoollogging.basicConfig(format='%(asctime)s%(message)s',level=logging.INFO)deff(x):time.sleep(......
  • 几行Python代码自动清理电脑重复文件
    随着互联网不断的发展,众多有技术的企业都已经转入人工智能的领域,我们知道人工智能首先就是需要会python编程,因此,如果能学好Python不仅仅只限于人工智能行业,能从事的行业还很......
  • 几行Python代码自动清理电脑重复文件
    随着互联网不断的发展,众多有技术的企业都已经转入人工智能的领域,我们知道人工智能首先就是需要会python编程,因此,如果能学好Python不仅仅只限于人工智能行业,能从事的行业还......
  • Python3排序sorted(key=lambda)
    Python3排序sorted(key=lambda)简述:假如d是一个由元组构成的列表,我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法,不要写成别的单词;x表示列......
  • python装饰器拦截方法执行
    importtimedeflog(delay=0):defdecorator(func):defwrapper(*args,**kwargs):"""我是wrapper的注释"""time1=time.......
  • python创建一个全为1的数据文件
    linux下创建一个全为1的数据文件touchm.pyimportstructcnt=128data=[0xFF]withopen('data','wb+')asfp:whilecnt>0:a=struct.pack(......
  • Python(12)--元组
    一、元组的基本介绍元组(tuple):这种数据类型结构与列表相同,但它与列表也有很大的差异,它的元素值与元素个数不可更改。列表的定义是将元素放入[]中,元组的定义是将元素放入()中......
  • 写博客的美化,标记,小技巧
    test谷咕咕<mark>test谷咕咕</mark>test谷咕咕ctrl+i加粗样式ctrl+b......