一、requests+lxml非登录爬取豆瓣数据1、首先打开豆瓣,找到你要爬取的电影短评地址的url,例如:2、打开网页中的开发者工具,在最上面直接按F12电脑,也有区别的,比如用Fn+F12打开ThinkPad,在页面找到网络->点击第一行->找到右边的消息头->向下滑动,找到请求头,记下user-agent?注意:这里的user-agent包括Browser相关信息和硬件设备信息等,可以伪装成合法的用户请求,否则报错403:accesstofilesordirectoryontheserverisdenied'https://movie.douban.com/subject/1292001/'headers={'User-Agent':'****'}4.获取网页数据(html风格的网页)?在非登录的情况下state,使用get()方法data=rq.get(url,headers=headers).textdata输出结果:5.获取网页数据后,需要解析网页s=etree.HTML(data)6、接下来获取网页中的元素信息,如:电影名称、导演、演员、时长等。可以手动获取网页信息,如下图:选中目标标签,右键-click->Copy->XPath(盗用网络图片)7.代码部分#默认返回listlistformatfilm=s.xpath('/html/body/div[3]/div[1]/h1/span[1]/text()')director=s.xpath('/html/body/div[3]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/span[1]/span[2]/a/text()')Starring=s.xpath('/html/body/div[3]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/span[3]/span[2]/a/text()')dur??ation=s.xpath('/html/body/div[3]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/span[13]/text()')print("片名:",film[0])print("导演:",director[0])print("Starring:",Starring[0])print("duration:",duration[0])二、模拟登录豆瓣爬取影评短片1、模拟登录豆瓣(一)登录方式有很多种到豆瓣,这里选择密码登录,首先需要获取密码登录的url。这里的url不是浏览器中的url地址,而是网络传输中的post请求。首先输入错误的账号和密码获取url点击post。才是真正的请求URL。接下来准备头部信息,在消息头部向下滑动,找到cookie和user-agent:然后开始传输用户名和密码,查看传输表单数据:代码部分:s=rq.session()deflogin_douban():#登录地址login_url='https://accounts.douban.com/j/mobile/login/basic'#请求头信息headers={'User-Agent':'****','Cookie':'****'}#传递用户名和密码data={'ck':'','name':'username','password':'password','remember':'false','ticket':''}try:r=s.post(url=login_url,headers=headers,data=data)r.raise_for_status()except:print("loginrequestfailed")return0#打印请求结果print(r.text)返回12.登录后爬取某页数据1.爬取前需要获取当前页面的url,例如获取第一页短评论的url,点击短评论,然后根据下图找到网址。同理,找到user-agent代码如下:comment_url='****'#requestheaderheaders={'user-agent':'Mozilla/5.0'}try:r=s.get(comment_url,headers=headers)r.raise_for_status()except:print('crawlingrequestfailed')return02、CrawlingAfterfetch请求发送成功,使用正则表达式提取影评内容?mark:re库主要用于字符串匹配comments=re.findall('
