关于第一篇的项目的扩展--尝试爬取一下虎扑上的一下贴子的数据(这个在后面的学习中补充上来)
python的json模块主要的两个函数
json.dumps()将python对象转换成json对象
json.loads()将json对象转换成python对象
这几天在学习如何爬取https://www.biqukan.com/上的小说,遇到了一些问题,就没有写文章,下面将这些问题和一些知识点总结一下
第一个问题就是爬出的中文是乱码的,解决办法就是
req.encoding = "GBK"
第二个问题就是无法爬出全部的文字只有最后一段,原因好像是网站的标签不规范,解决办法就是
soup.prettify()
但是这样处理过后,就变成了字符串,无法使用find_all()。于是就改用使用webdriver尝试一下,没想到就成功了
无痕浏览器 phantomjs() 但是selenium已经弃用了phantomjs,解决方案之一就是
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options = chrome_options)
下面就来进行一下关于BeatuifulSoup和Selenium相关知识的总结,加深一下记忆
BeautifulSoup将复杂的html文档转换成一个复杂的树形结构,每一个节点都是Python对象,所有对象可以划分为4类
Tag NavigableString BeautifulSoup Comment
Tag
就是html中的标签,他查找的是在所有内容中的第一个符合要求的标签,如
<title>Python</title>
调用的方法就是 soup.title 输出结果就是<title>Python</title>
NavigableString
得到了标签,要想得到标签里面的内容的话,用.string就可以了
soup.title.string
#输出 Python
遍历文档树
find_all(name,attrs,recursive,text,limit,**kawargs)
#最常用的要在方式就是
find_all('div',class_ ='text')
#查找所有class为text类的div标签
Selenium
元素选取API
#单个元素选取
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
#多个元素选取
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
还可以用By类来确定使用哪种选择方式
from selenium.webdriver.common.by import By
driver.find_element(By.xpath,'')