Python爬虫日记(一)
在文件的顶部指定编码。
-*- coding: utf-8 -*-
-*- coding: gbk -*-
URL
-
Python 使用 + 操作符来拼接字符串,也可以使用 .join() 方法来拼接多个字符串。
-
在Python中,.join() 是字符串对象的一个方法,用于将列表中的字符串连接成一个新的字符串,可以指定连接符。
# + 操作符
str1 = "Hello"
str2 = "World"
result = str1 + " " + str2
print(result) # Output: Hello World
# .join
# 形式一
str_list = ["Hello", "World"]
result = " ".join(str_list)
print(result) # Output: Hello World
# 形式二
def join(strings):
return " ".join(strings)
str_list = ["我", "爱", "你"]
result = join(str_list)
print(result) # Output: 我 爱 你
requests库
常用的requests库函数及其简要说明
-
requests.get(url, params=None, headers=None, cookies=None, timeout=None): 发送GET请求并返回一个Response对象。可以传递查询参数、请求头、Cookie和超时时间。
-
requests.post(url, data=None, json=None, headers=None, cookies=None, timeout=None): 发送POST请求并返回一个Response对象。可以传递表单数据、JSON数据、请求头、Cookie和超时时间。
-
response.status_code: 获取响应状态码。
-
response.headers: 获取响应头信息。
-
response.cookies: 获取响应中的Cookie信息。
-
response.url: 获取最终请求的URL。
-
response.text: 获取响应内容的文本形式。这个属性会自动根据响应内容的编码进行解码,并返回一个字符串对象。整个HTML结构
-
response.content: 获取响应内容的字节形式。这个属性返回一个包含响应内容字节的bytes对象,不进行解码。
-
response.json(): 将响应内容解析为JSON格式。如果响应内容是JSON格式的,这个方法会自动解析并返回一个对应的Python数据结构(通常是字典或列表)。
BeautifulSoup库
BeautifulSoup是一个用于解析HTML和XML文档的Python库,它提供了一些方便的函数来从网页中提取数据。
-
BeautifulSoup(html, ‘html.parser’): 创建一个BeautifulSoup对象,将HTML文档解析为树形结构。使用html.parser解析器来创建一个BeautifulSoup对象。这样就可以使用BeautifulSoup提供的方法来提取网页中的数据。
-
find(name, attrs, recursive, text, **kwargs): 在文档中查找第一个符合条件的标签,并返回该标签的BeautifulSoup对象。
-
find_all(name, attrs, recursive, text, limit, **kwargs): 在文档中查找所有符合条件的标签,并返回一个列表。
-
select(css_selector): 使用CSS选择器来查找匹配的元素,并返回一个列表。
-
.text: 获取标签内的文本内容。
-
.strip是 Python 中用于移除字符串两侧空白(包括空格、制表符、换行符等)的方法。.text.strip()是用来获取该标签内的文本内容,并去除首尾的空白字符。
-
.attrs: 获取标签的属性字典。
-
.get(attribute): 获取标签的指定属性值。
-
**.find_parent(name, attrs, recursive, text, kwargs): 查找当前标签的父标签。
-
**.find_next_sibling(name, attrs, recursive, text, kwargs): 查找当前标签的下一个同级标签。
-
**.find_previous_sibling(name, attrs, recursive, text, kwargs): 查找当前标签的前一个同级标签。
-
.find_all_next(name, attrs, recursive, text, kwargs): 查找当前标签之后的所有符合条件的标签。
-
.find_all_previous(name, attrs, recursive, text, kwargs): 查找当前标签之前的所有符合条件的标签。
-
.prettify(): 格式化输出BeautifulSoup对象,使其易于阅读。
attrs参数寻找标签属性
- 使用attrs参数查找具有特定属性的标签
div_with_attr = soup.find(‘div’, attrs={‘id’: ‘main-content’})
print(“具有id为main-content的div标签:”, div_with_attr)
#使用 ['href'] 语法来获取这个属性的值。这样,就可以获取到 <a> 标签的 href 属性值。
#返回的是一个标签对象,我们想要获取这个标签的 href 属性值。
#因此,我们使用 ['href'] 语法来获取这个属性的值。这样,就可以获取到 <a> 标签的 href 属性值。
res_3 = title.find('a', href=True)['href']
#当我们使用find()方法查找某个标签时,可以通过指定属性来过滤结果。
#代码中,href=True 是过滤条件,表示我们只想获取具有 href 属性的 <a> 标签。
attrs和class_的区别
- attrs和class_的区别,两者都是BeautifulSoup中用于查找标签的参数。
- attrs参数:attrs是一个字典,用于指定标签的属性和属性值。
可以通过attrs参数指定任意的标签属性和属性值,不限于class属性。适用于查找具有特定属性及其属性值的标签,不仅限于class属性。 - class_参数:class_是一个特殊的参数,用于指定查找具有特定类名的标签。
通常用于查找带有特定类的标签,语法更简洁,只需要传递类名字符串即可。用于查找带有指定类名的标签,比较方便。
使用attrs参数查找具有特定属性的标签
div_with_attr = soup.find('div', attrs={'id': 'main-content'})
print("具有id为main-content的div标签:", div_with_attr)
# 使用class_参数查找带有特定类的标签
paragraphs_with_class = soup.find_all('p', class_='paragraph')
print("所有带有paragraph类的p标签:", paragraphs_with_class)